From 115e0de2edc11ef237e36965730551a0f0b2399c Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 15 Aug 2023 10:37:18 +0000 Subject: [PATCH 01/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6a18b80..3b241c6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.0.8", "@stdlib/ndarray-base-vind2bind": "^0.0.8", "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", + "@stdlib/error-tools-fmtprodmsg": "^0.0.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.0.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 210c1177485095feaacdcf8dd8ffb814bd27fbd7 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 15 Aug 2023 10:38:44 +0000 Subject: [PATCH 02/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 62 - .github/workflows/cancel.yml | 56 - .github/workflows/close_pull_requests.yml | 44 - .github/workflows/examples.yml | 62 - .github/workflows/npm_downloads.yml | 108 - .github/workflows/productionize.yml | 783 --- .github/workflows/publish.yml | 242 - .github/workflows/test.yml | 97 - .github/workflows/test_bundles.yml | 180 - .github/workflows/test_coverage.yml | 123 - .github/workflows/test_install.yml | 83 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/test.js | 40 - 40 files changed, 6208 insertions(+), 4600 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/test.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 0fd4d6c..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 06a9a75..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index a00dbe5..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,56 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - uses: styfle/cancel-workflow-action@0.11.0 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index bd045fb..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,44 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: superbrothers/close-pull-request@v3 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 7902a7d..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout the repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 52f0548..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,108 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - uses: actions/upload-artifact@v3 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - uses: distributhor/workflow-webhook@v3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 91f2b93..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,783 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - uses: actions/checkout@v3 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/checkout@v3 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - uses: act10ns/slack@v2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -233,7 +232,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 179c217..06f0f96 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection } from '@stdlib/types/object'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..e999a26 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index cbedeac..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3b241c6..85d099a 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.0.1", - "@stdlib/array-base-zeros": "^0.0.2", - "@stdlib/blas-ext-base-grev": "^0.0.10", - "@stdlib/ndarray-base-numel": "^0.0.8", - "@stdlib/ndarray-base-shape2strides": "^0.0.8", - "@stdlib/ndarray-base-vind2bind": "^0.0.8", - "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", - "@stdlib/error-tools-fmtprodmsg": "^0.0.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.0.2", - "@stdlib/array-base-zero-to": "^0.0.6", - "@stdlib/array-float64": "^0.0.6", - "@stdlib/assert-has-own-property": "^0.0.7", - "@stdlib/assert-is-array": "^0.0.7", - "@stdlib/assert-is-float64array": "^0.0.8", - "@stdlib/bench": "^0.0.12", - "@stdlib/math-base-special-abs": "^0.0.6", - "@stdlib/utils-nary-function": "^0.0.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..2b8ab45 --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); From 1307dc1475c8930d22510c2b846bb2b6ed2d8a11 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 15 Aug 2023 21:49:57 +0000 Subject: [PATCH 03/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6a18b80..3b241c6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.0.8", "@stdlib/ndarray-base-vind2bind": "^0.0.8", "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", + "@stdlib/error-tools-fmtprodmsg": "^0.0.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.0.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 85b97988e307d0f406b141d78d08e76753d0d376 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 15 Aug 2023 21:50:29 +0000 Subject: [PATCH 04/85] Remove files --- index.d.ts | 1179 ---------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7361 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 06f0f96..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1179 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection } from '@stdlib/types/object'; - -// FIXME: shapes should be collections of a defined length - -/** -* One-dimensional array. -*/ -type Array1D = Collection; - -/** -* Two-dimensional array. -*/ -type Array2D = Array>; - -/** -* Three-dimensional array. -*/ -type Array3D = Array>; - -/** -* Four-dimensional array. -*/ -type Array4D = Array>; - -/** -* Five-dimensional array. -*/ -type Array5D = Array>; - -/** -* Six-dimensional array. -*/ -type Array6D = Array>; - -/** -* Seven-dimensional array. -*/ -type Array7D = Array>; - -/** -* Eight-dimensional array. -*/ -type Array8D = Array>; - -/** -* Nine-dimensional array. -*/ -type Array9D = Array>; - -/** -* Ten-dimensional array. -*/ -type Array10D = Array>; // WARNING: arbitrarily limited to 10 dimensions, which should be fine for most practical purposes - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = () => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index e999a26..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 2b8ab45..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 9e6c0ecbf17502e548bd2e1a3fcdd4ce133fc36c Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 15 Aug 2023 21:51:18 +0000 Subject: [PATCH 05/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 62 - .github/workflows/cancel.yml | 56 - .github/workflows/close_pull_requests.yml | 44 - .github/workflows/examples.yml | 62 - .github/workflows/npm_downloads.yml | 108 - .github/workflows/productionize.yml | 783 --- .github/workflows/publish.yml | 242 - .github/workflows/test.yml | 97 - .github/workflows/test_bundles.yml | 180 - .github/workflows/test_coverage.yml | 123 - .github/workflows/test_install.yml | 83 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 42 files changed, 6208 insertions(+), 6477 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 0fd4d6c..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 06a9a75..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index a00dbe5..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,56 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - uses: styfle/cancel-workflow-action@0.11.0 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index bd045fb..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,44 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: superbrothers/close-pull-request@v3 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 7902a7d..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout the repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 52f0548..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,108 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - uses: actions/upload-artifact@v3 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - uses: distributhor/workflow-webhook@v3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 91f2b93..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,783 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - uses: actions/checkout@v3 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/checkout@v3 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - uses: act10ns/slack@v2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -233,7 +232,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 179c217..06f0f96 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection } from '@stdlib/types/object'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..e999a26 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index cbedeac..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3b241c6..85d099a 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.0.1", - "@stdlib/array-base-zeros": "^0.0.2", - "@stdlib/blas-ext-base-grev": "^0.0.10", - "@stdlib/ndarray-base-numel": "^0.0.8", - "@stdlib/ndarray-base-shape2strides": "^0.0.8", - "@stdlib/ndarray-base-vind2bind": "^0.0.8", - "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", - "@stdlib/error-tools-fmtprodmsg": "^0.0.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.0.2", - "@stdlib/array-base-zero-to": "^0.0.6", - "@stdlib/array-float64": "^0.0.6", - "@stdlib/assert-has-own-property": "^0.0.7", - "@stdlib/assert-is-array": "^0.0.7", - "@stdlib/assert-is-float64array": "^0.0.8", - "@stdlib/bench": "^0.0.12", - "@stdlib/math-base-special-abs": "^0.0.6", - "@stdlib/utils-nary-function": "^0.0.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..0088df5 --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 8cdde64c8aae34411b5b9fb550ff34a32b7e2377 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 15 Aug 2023 21:56:10 +0000 Subject: [PATCH 06/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6a18b80..3b241c6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.0.8", "@stdlib/ndarray-base-vind2bind": "^0.0.8", "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", + "@stdlib/error-tools-fmtprodmsg": "^0.0.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.0.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 6ba6c4d71732ed40095ad301f70c629b59367650 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 15 Aug 2023 21:56:43 +0000 Subject: [PATCH 07/85] Remove files --- index.d.ts | 1179 ---------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7361 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 06f0f96..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1179 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection } from '@stdlib/types/object'; - -// FIXME: shapes should be collections of a defined length - -/** -* One-dimensional array. -*/ -type Array1D = Collection; - -/** -* Two-dimensional array. -*/ -type Array2D = Array>; - -/** -* Three-dimensional array. -*/ -type Array3D = Array>; - -/** -* Four-dimensional array. -*/ -type Array4D = Array>; - -/** -* Five-dimensional array. -*/ -type Array5D = Array>; - -/** -* Six-dimensional array. -*/ -type Array6D = Array>; - -/** -* Seven-dimensional array. -*/ -type Array7D = Array>; - -/** -* Eight-dimensional array. -*/ -type Array8D = Array>; - -/** -* Nine-dimensional array. -*/ -type Array9D = Array>; - -/** -* Ten-dimensional array. -*/ -type Array10D = Array>; // WARNING: arbitrarily limited to 10 dimensions, which should be fine for most practical purposes - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = () => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index e999a26..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 0088df5..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 1f7d301f12ae9d9e5e1720a88135df7fa447f184 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 15 Aug 2023 21:57:50 +0000 Subject: [PATCH 08/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 62 - .github/workflows/cancel.yml | 56 - .github/workflows/close_pull_requests.yml | 44 - .github/workflows/examples.yml | 62 - .github/workflows/npm_downloads.yml | 108 - .github/workflows/productionize.yml | 783 --- .github/workflows/publish.yml | 242 - .github/workflows/test.yml | 97 - .github/workflows/test_bundles.yml | 180 - .github/workflows/test_coverage.yml | 123 - .github/workflows/test_install.yml | 83 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 42 files changed, 6208 insertions(+), 6477 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 0fd4d6c..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 06a9a75..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index a00dbe5..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,56 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - uses: styfle/cancel-workflow-action@0.11.0 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index bd045fb..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,44 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: superbrothers/close-pull-request@v3 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 7902a7d..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout the repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 52f0548..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,108 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - uses: actions/upload-artifact@v3 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - uses: distributhor/workflow-webhook@v3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 91f2b93..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,783 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - uses: actions/checkout@v3 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/checkout@v3 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - uses: act10ns/slack@v2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -233,7 +232,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 179c217..06f0f96 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection } from '@stdlib/types/object'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..e999a26 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3b241c6..85d099a 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.0.1", - "@stdlib/array-base-zeros": "^0.0.2", - "@stdlib/blas-ext-base-grev": "^0.0.10", - "@stdlib/ndarray-base-numel": "^0.0.8", - "@stdlib/ndarray-base-shape2strides": "^0.0.8", - "@stdlib/ndarray-base-vind2bind": "^0.0.8", - "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", - "@stdlib/error-tools-fmtprodmsg": "^0.0.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.0.2", - "@stdlib/array-base-zero-to": "^0.0.6", - "@stdlib/array-float64": "^0.0.6", - "@stdlib/assert-has-own-property": "^0.0.7", - "@stdlib/assert-is-array": "^0.0.7", - "@stdlib/assert-is-float64array": "^0.0.8", - "@stdlib/bench": "^0.0.12", - "@stdlib/math-base-special-abs": "^0.0.6", - "@stdlib/utils-nary-function": "^0.0.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..92e5abb --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From d1f69b327c9b80cd1f0086751a2a0f8c1d23046d Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 17 Aug 2023 02:22:19 +0000 Subject: [PATCH 09/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6a18b80..3b241c6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.0.8", "@stdlib/ndarray-base-vind2bind": "^0.0.8", "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", + "@stdlib/error-tools-fmtprodmsg": "^0.0.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.0.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 63c4fe195f36d816290294c548e6d7f1a9bed24a Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 17 Aug 2023 02:31:08 +0000 Subject: [PATCH 10/85] Remove files --- index.d.ts | 1179 ---------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7361 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 06f0f96..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1179 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection } from '@stdlib/types/object'; - -// FIXME: shapes should be collections of a defined length - -/** -* One-dimensional array. -*/ -type Array1D = Collection; - -/** -* Two-dimensional array. -*/ -type Array2D = Array>; - -/** -* Three-dimensional array. -*/ -type Array3D = Array>; - -/** -* Four-dimensional array. -*/ -type Array4D = Array>; - -/** -* Five-dimensional array. -*/ -type Array5D = Array>; - -/** -* Six-dimensional array. -*/ -type Array6D = Array>; - -/** -* Seven-dimensional array. -*/ -type Array7D = Array>; - -/** -* Eight-dimensional array. -*/ -type Array8D = Array>; - -/** -* Nine-dimensional array. -*/ -type Array9D = Array>; - -/** -* Ten-dimensional array. -*/ -type Array10D = Array>; // WARNING: arbitrarily limited to 10 dimensions, which should be fine for most practical purposes - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = () => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index e999a26..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 92e5abb..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 1b8d42d01b311cecc97191a1faf4b23aa7c49505 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 17 Aug 2023 02:31:59 +0000 Subject: [PATCH 11/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 62 - .github/workflows/cancel.yml | 56 - .github/workflows/close_pull_requests.yml | 44 - .github/workflows/examples.yml | 62 - .github/workflows/npm_downloads.yml | 108 - .github/workflows/productionize.yml | 783 --- .github/workflows/publish.yml | 242 - .github/workflows/test.yml | 97 - .github/workflows/test_bundles.yml | 180 - .github/workflows/test_coverage.yml | 123 - .github/workflows/test_install.yml | 83 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 42 files changed, 6208 insertions(+), 6477 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 0fd4d6c..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 06a9a75..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index a00dbe5..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,56 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - uses: styfle/cancel-workflow-action@0.11.0 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index bd045fb..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,44 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: superbrothers/close-pull-request@v3 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 7902a7d..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout the repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 52f0548..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,108 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - uses: actions/upload-artifact@v3 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - uses: distributhor/workflow-webhook@v3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 91f2b93..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,783 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - uses: actions/checkout@v3 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/checkout@v3 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - uses: act10ns/slack@v2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -233,7 +232,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index f0a0b05..7e99a56 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..e999a26 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3b241c6..85d099a 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.0.1", - "@stdlib/array-base-zeros": "^0.0.2", - "@stdlib/blas-ext-base-grev": "^0.0.10", - "@stdlib/ndarray-base-numel": "^0.0.8", - "@stdlib/ndarray-base-shape2strides": "^0.0.8", - "@stdlib/ndarray-base-vind2bind": "^0.0.8", - "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", - "@stdlib/error-tools-fmtprodmsg": "^0.0.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.0.2", - "@stdlib/array-base-zero-to": "^0.0.6", - "@stdlib/array-float64": "^0.0.6", - "@stdlib/assert-has-own-property": "^0.0.7", - "@stdlib/assert-is-array": "^0.0.7", - "@stdlib/assert-is-float64array": "^0.0.8", - "@stdlib/bench": "^0.0.12", - "@stdlib/math-base-special-abs": "^0.0.6", - "@stdlib/utils-nary-function": "^0.0.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..635edee --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 5ec368b1c8bf10b7ff091639b59d7243cd96636c Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 24 Aug 2023 10:08:55 +0000 Subject: [PATCH 12/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6a18b80..3b241c6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.0.8", "@stdlib/ndarray-base-vind2bind": "^0.0.8", "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", + "@stdlib/error-tools-fmtprodmsg": "^0.0.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.0.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 39bfe63390ff9f91443fcdcb0b65397e2a57e6aa Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 24 Aug 2023 10:26:56 +0000 Subject: [PATCH 13/85] Remove files --- index.d.ts | 1179 ---------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7361 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 7e99a56..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1179 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection } from '@stdlib/types/array'; - -// FIXME: shapes should be collections of a defined length - -/** -* One-dimensional array. -*/ -type Array1D = Collection; - -/** -* Two-dimensional array. -*/ -type Array2D = Array>; - -/** -* Three-dimensional array. -*/ -type Array3D = Array>; - -/** -* Four-dimensional array. -*/ -type Array4D = Array>; - -/** -* Five-dimensional array. -*/ -type Array5D = Array>; - -/** -* Six-dimensional array. -*/ -type Array6D = Array>; - -/** -* Seven-dimensional array. -*/ -type Array7D = Array>; - -/** -* Eight-dimensional array. -*/ -type Array8D = Array>; - -/** -* Nine-dimensional array. -*/ -type Array9D = Array>; - -/** -* Ten-dimensional array. -*/ -type Array10D = Array>; // WARNING: arbitrarily limited to 10 dimensions, which should be fine for most practical purposes - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = () => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index e999a26..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 635edee..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 7118a63fbc85d29a29a27f0694889c015e8f980b Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 24 Aug 2023 10:27:52 +0000 Subject: [PATCH 14/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 62 - .github/workflows/cancel.yml | 56 - .github/workflows/close_pull_requests.yml | 44 - .github/workflows/examples.yml | 62 - .github/workflows/npm_downloads.yml | 108 - .github/workflows/productionize.yml | 783 --- .github/workflows/publish.yml | 242 - .github/workflows/test.yml | 97 - .github/workflows/test_bundles.yml | 180 - .github/workflows/test_coverage.yml | 123 - .github/workflows/test_install.yml | 83 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 42 files changed, 6208 insertions(+), 6477 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 0fd4d6c..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 06a9a75..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index a00dbe5..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,56 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - uses: styfle/cancel-workflow-action@0.11.0 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index bd045fb..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,44 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: superbrothers/close-pull-request@v3 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 7902a7d..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout the repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 52f0548..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,108 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - uses: actions/upload-artifact@v3 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - uses: distributhor/workflow-webhook@v3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 91f2b93..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,783 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - uses: actions/checkout@v3 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/checkout@v3 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - uses: act10ns/slack@v2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -233,7 +232,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index ab3151a..d6db42b 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..e999a26 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3b241c6..85d099a 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.0.1", - "@stdlib/array-base-zeros": "^0.0.2", - "@stdlib/blas-ext-base-grev": "^0.0.10", - "@stdlib/ndarray-base-numel": "^0.0.8", - "@stdlib/ndarray-base-shape2strides": "^0.0.8", - "@stdlib/ndarray-base-vind2bind": "^0.0.8", - "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", - "@stdlib/error-tools-fmtprodmsg": "^0.0.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.0.2", - "@stdlib/array-base-zero-to": "^0.0.6", - "@stdlib/array-float64": "^0.0.6", - "@stdlib/assert-has-own-property": "^0.0.7", - "@stdlib/assert-is-array": "^0.0.7", - "@stdlib/assert-is-float64array": "^0.0.8", - "@stdlib/bench": "^0.0.12", - "@stdlib/math-base-special-abs": "^0.0.6", - "@stdlib/utils-nary-function": "^0.0.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..4c16029 --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 369db90d7bd8763412b83b8c2ba2f6d8b011beb5 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 24 Aug 2023 21:40:08 +0000 Subject: [PATCH 15/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6a18b80..3b241c6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.0.8", "@stdlib/ndarray-base-vind2bind": "^0.0.8", "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", + "@stdlib/error-tools-fmtprodmsg": "^0.0.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.0.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 90ca95e859f330f2b54972deb835607becc7d4ce Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 24 Aug 2023 21:40:39 +0000 Subject: [PATCH 16/85] Remove files --- index.d.ts | 1179 ---------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7361 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6db42b..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1179 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection } from '@stdlib/types/array'; - -// FIXME: shapes should be collections of a defined length - -/** -* One-dimensional array. -*/ -type Array1D = Collection; - -/** -* Two-dimensional array. -*/ -type Array2D = Array>; - -/** -* Three-dimensional array. -*/ -type Array3D = Array>; - -/** -* Four-dimensional array. -*/ -type Array4D = Array>; - -/** -* Five-dimensional array. -*/ -type Array5D = Array>; - -/** -* Six-dimensional array. -*/ -type Array6D = Array>; - -/** -* Seven-dimensional array. -*/ -type Array7D = Array>; - -/** -* Eight-dimensional array. -*/ -type Array8D = Array>; - -/** -* Nine-dimensional array. -*/ -type Array9D = Array>; - -/** -* Ten-dimensional array. -*/ -type Array10D = Array>; // WARNING: arbitrarily limited to 10 dimensions, which should be fine for most practical purposes - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index e999a26..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 4c16029..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 574c522a647426adeb246c43e54532178278dcf9 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 24 Aug 2023 21:41:33 +0000 Subject: [PATCH 17/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 62 - .github/workflows/cancel.yml | 56 - .github/workflows/close_pull_requests.yml | 44 - .github/workflows/examples.yml | 62 - .github/workflows/npm_downloads.yml | 108 - .github/workflows/productionize.yml | 783 --- .github/workflows/publish.yml | 242 - .github/workflows/test.yml | 97 - .github/workflows/test_bundles.yml | 180 - .github/workflows/test_coverage.yml | 123 - .github/workflows/test_install.yml | 83 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 42 files changed, 6208 insertions(+), 6477 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 0fd4d6c..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 06a9a75..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index a00dbe5..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,56 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - uses: styfle/cancel-workflow-action@0.11.0 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index bd045fb..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,44 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: superbrothers/close-pull-request@v3 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 7902a7d..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout the repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 52f0548..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,108 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - uses: actions/upload-artifact@v3 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - uses: distributhor/workflow-webhook@v3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 91f2b93..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,783 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - uses: actions/checkout@v3 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/checkout@v3 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - uses: act10ns/slack@v2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -233,7 +232,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 536f5bc..0ffead5 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..e999a26 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3b241c6..85d099a 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.0.1", - "@stdlib/array-base-zeros": "^0.0.2", - "@stdlib/blas-ext-base-grev": "^0.0.10", - "@stdlib/ndarray-base-numel": "^0.0.8", - "@stdlib/ndarray-base-shape2strides": "^0.0.8", - "@stdlib/ndarray-base-vind2bind": "^0.0.8", - "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", - "@stdlib/error-tools-fmtprodmsg": "^0.0.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.0.2", - "@stdlib/array-base-zero-to": "^0.0.6", - "@stdlib/array-float64": "^0.0.6", - "@stdlib/assert-has-own-property": "^0.0.7", - "@stdlib/assert-is-array": "^0.0.7", - "@stdlib/assert-is-float64array": "^0.0.8", - "@stdlib/bench": "^0.0.12", - "@stdlib/math-base-special-abs": "^0.0.6", - "@stdlib/utils-nary-function": "^0.0.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..5c7b324 --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 6beeea2c76a83cd9d275c2276459224db280eb20 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 25 Aug 2023 00:31:21 +0000 Subject: [PATCH 18/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c04a1b6..3018965 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.0.8", "@stdlib/ndarray-base-vind2bind": "^0.0.8", "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", + "@stdlib/error-tools-fmtprodmsg": "^0.0.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.0.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 33fad37ae259d6f28324f0c237d8e07526b2c411 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 25 Aug 2023 00:33:02 +0000 Subject: [PATCH 19/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 0ffead5..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index e999a26..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 5c7b324..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From e4e775d3b4868c4b790655080a24e2d062a90625 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 25 Aug 2023 00:33:51 +0000 Subject: [PATCH 20/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 62 - .github/workflows/cancel.yml | 56 - .github/workflows/close_pull_requests.yml | 44 - .github/workflows/examples.yml | 62 - .github/workflows/npm_downloads.yml | 108 - .github/workflows/productionize.yml | 783 --- .github/workflows/publish.yml | 242 - .github/workflows/test.yml | 97 - .github/workflows/test_bundles.yml | 180 - .github/workflows/test_coverage.yml | 123 - .github/workflows/test_install.yml | 83 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 42 files changed, 6208 insertions(+), 6477 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 0fd4d6c..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 06a9a75..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index a00dbe5..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,56 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - uses: styfle/cancel-workflow-action@0.11.0 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index bd045fb..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,44 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: superbrothers/close-pull-request@v3 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 7902a7d..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout the repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 52f0548..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,108 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - uses: actions/upload-artifact@v3 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - uses: distributhor/workflow-webhook@v3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 91f2b93..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,783 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - uses: actions/checkout@v3 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/checkout@v3 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - uses: act10ns/slack@v2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -244,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 536f5bc..0ffead5 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..e999a26 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3018965..6d46dcf 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.0.1", - "@stdlib/array-base-zeros": "^0.0.2", - "@stdlib/blas-ext-base-grev": "^0.0.10", - "@stdlib/ndarray-base-numel": "^0.0.8", - "@stdlib/ndarray-base-shape2strides": "^0.0.8", - "@stdlib/ndarray-base-vind2bind": "^0.0.8", - "@stdlib/types": "^0.0.14", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7", - "@stdlib/error-tools-fmtprodmsg": "^0.0.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.0.2", - "@stdlib/array-base-zero-to": "^0.0.6", - "@stdlib/array-float64": "^0.0.6", - "@stdlib/assert-has-own-property": "^0.0.7", - "@stdlib/assert-is-array": "^0.0.7", - "@stdlib/assert-is-float64array": "^0.0.8", - "@stdlib/bench": "^0.0.12", - "@stdlib/math-base-special-abs": "^0.0.6", - "@stdlib/utils-nary-function": "^0.0.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..c0c5a4a --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From f6ada6180cdf8c644eaa95432a4a107479ccd89a Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 25 Aug 2023 00:34:10 +0000 Subject: [PATCH 21/85] Update README.md for ESM bundle v0.0.1 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a1293fc..925c0bd 100644 --- a/README.md +++ b/README.md @@ -44,13 +44,13 @@ limitations under the License. ## Usage ```javascript -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.0.1-esm/index.mjs'; ``` You can also import the following named exports from the package: ```javascript -import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.0.1-esm/index.mjs'; ``` #### flattenBy( x, shape, colexicographic, clbk\[, thisArg] ) @@ -161,7 +161,7 @@ y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); import naryFunction from 'https://cdn.jsdelivr.net/gh/stdlib-js/utils-nary-function@esm/index.mjs'; import abs from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-abs@esm/index.mjs'; -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.0.1-esm/index.mjs'; var fcn = naryFunction( abs, 1 ); From 668b2ae8f21b1d11bf6a1cc64925d2b40f10ba65 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 25 Aug 2023 00:34:11 +0000 Subject: [PATCH 22/85] Auto-generated commit --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 925c0bd..00b2fcb 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,11 @@ limitations under the License. ## Usage +```javascript +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +``` +The previous example will load the latest bundled code from the esm branch. Alternatively, you may load a specific version by loading the file from one of the [tagged bundles](https://github.com/stdlib-js/array-base-flatten-by/tags). For example, + ```javascript import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.0.1-esm/index.mjs'; ``` @@ -50,7 +55,7 @@ import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten- You can also import the following named exports from the package: ```javascript -import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.0.1-esm/index.mjs'; +import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; ``` #### flattenBy( x, shape, colexicographic, clbk\[, thisArg] ) @@ -161,7 +166,7 @@ y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); import naryFunction from 'https://cdn.jsdelivr.net/gh/stdlib-js/utils-nary-function@esm/index.mjs'; import abs from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-abs@esm/index.mjs'; -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.0.1-esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; var fcn = naryFunction( abs, 1 ); From fc1b920dc01549d346f93ae9fe753506a04652bb Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 24 Sep 2023 18:05:27 +0000 Subject: [PATCH 23/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6072233..33aea5f 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.1.0", "@stdlib/ndarray-base-vind2bind": "^0.1.0", "@stdlib/types": "^0.1.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.0" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.0", + "@stdlib/error-tools-fmtprodmsg": "^0.1.0" }, "devDependencies": { "@stdlib/array-base-filled": "^0.1.0", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 8d2a4612fc9bf146ea4c6dd94605e47fe1f7d361 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 24 Sep 2023 18:44:42 +0000 Subject: [PATCH 24/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 0ffead5..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index e999a26..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.0.10-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.0.1-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,h,f,b,c;for(p=(b=n+1)===r,f=t[n],c=0;c[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;mpBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index c0c5a4a..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 2d263f4847ef6d8ee0cb916c900f3e31dc5a70f3 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 24 Sep 2023 18:45:27 +0000 Subject: [PATCH 25/85] Auto-generated commit --- .editorconfig | 186 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 62 - .github/workflows/cancel.yml | 56 - .github/workflows/close_pull_requests.yml | 44 - .github/workflows/examples.yml | 62 - .github/workflows/npm_downloads.yml | 108 - .github/workflows/productionize.yml | 783 --- .github/workflows/publish.yml | 242 - .github/workflows/test.yml | 97 - .github/workflows/test_bundles.yml | 180 - .github/workflows/test_coverage.yml | 123 - .github/workflows/test_install.yml | 83 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 43 files changed, 6208 insertions(+), 6512 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 13e9c39..0000000 --- a/.editorconfig +++ /dev/null @@ -1,186 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 06a9a75..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index a00dbe5..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,56 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - uses: styfle/cancel-workflow-action@0.11.0 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index bd045fb..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,44 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: superbrothers/close-pull-request@v3 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 7902a7d..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,62 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout the repository' - uses: actions/checkout@v3 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 52f0548..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,108 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - uses: actions/upload-artifact@v3 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - uses: distributhor/workflow-webhook@v3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 91f2b93..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,783 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - uses: actions/checkout@v3 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/checkout@v3 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - uses: act10ns/slack@v2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - uses: actions/checkout@v3 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - uses: actions/setup-node@v3 - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -244,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 536f5bc..0ffead5 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..b192be3 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.0-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.0-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.0-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.0-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;8qBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 33aea5f..798789f 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.1.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.1.0", - "@stdlib/array-base-zeros": "^0.1.0", - "@stdlib/blas-ext-base-grev": "^0.1.0", - "@stdlib/ndarray-base-numel": "^0.1.0", - "@stdlib/ndarray-base-shape2strides": "^0.1.0", - "@stdlib/ndarray-base-vind2bind": "^0.1.0", - "@stdlib/types": "^0.1.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.0", - "@stdlib/error-tools-fmtprodmsg": "^0.1.0" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.1.0", - "@stdlib/array-base-zero-to": "^0.1.0", - "@stdlib/array-float64": "^0.1.0", - "@stdlib/assert-has-own-property": "^0.1.0", - "@stdlib/assert-is-array": "^0.1.0", - "@stdlib/assert-is-float64array": "^0.1.0", - "@stdlib/bench": "^0.1.0", - "@stdlib/math-base-special-abs": "^0.1.0", - "@stdlib/utils-nary-function": "^0.1.0", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..e6f92bc --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 6797895380c3733dd8805e065c1104a609a3cf97 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 24 Sep 2023 19:07:57 +0000 Subject: [PATCH 26/85] Update README.md for ESM bundle v0.1.0 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 65e8dd8..b3fb0b8 100644 --- a/README.md +++ b/README.md @@ -44,13 +44,13 @@ limitations under the License. ## Usage ```javascript -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.1.0-esm/index.mjs'; ``` You can also import the following named exports from the package: ```javascript -import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.1.0-esm/index.mjs'; ``` #### flattenBy( x, shape, colexicographic, clbk\[, thisArg] ) @@ -161,7 +161,7 @@ y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); import naryFunction from 'https://cdn.jsdelivr.net/gh/stdlib-js/utils-nary-function@esm/index.mjs'; import abs from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-abs@esm/index.mjs'; -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.1.0-esm/index.mjs'; var fcn = naryFunction( abs, 1 ); From 4b08a6e2a61d0b6af976404c4f6af4ec5c2e9ccc Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 24 Sep 2023 19:07:58 +0000 Subject: [PATCH 27/85] Auto-generated commit --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b3fb0b8..f5ca09e 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,11 @@ limitations under the License. ## Usage +```javascript +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +``` +The previous example will load the latest bundled code from the esm branch. Alternatively, you may load a specific version by loading the file from one of the [tagged bundles](https://github.com/stdlib-js/array-base-flatten-by/tags). For example, + ```javascript import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.1.0-esm/index.mjs'; ``` @@ -50,7 +55,7 @@ import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten- You can also import the following named exports from the package: ```javascript -import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.1.0-esm/index.mjs'; +import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; ``` #### flattenBy( x, shape, colexicographic, clbk\[, thisArg] ) @@ -161,7 +166,7 @@ y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); import naryFunction from 'https://cdn.jsdelivr.net/gh/stdlib-js/utils-nary-function@esm/index.mjs'; import abs from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-abs@esm/index.mjs'; -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.1.0-esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; var fcn = naryFunction( abs, 1 ); From b174182fa748592ef2404e00cf0b2ae3cb4a0b80 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 1 Oct 2023 17:32:15 +0000 Subject: [PATCH 28/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b828c28..fecf7b5 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.1.0", "@stdlib/ndarray-base-vind2bind": "^0.1.0", "@stdlib/types": "^0.1.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.0" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.0", + "@stdlib/error-tools-fmtprodmsg": "^0.1.0" }, "devDependencies": { "@stdlib/array-base-filled": "^0.1.0", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From d33182c15d923458e5d44a0917947e236c761df9 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 3 Oct 2023 03:19:34 +0000 Subject: [PATCH 29/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 0ffead5..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index b192be3..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.0-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.0-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.0-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.0-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;8qBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index e6f92bc..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 75de8c398781a2dc33597f80ff2878e49e26ed09 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Tue, 3 Oct 2023 03:20:29 +0000 Subject: [PATCH 30/85] Auto-generated commit --- .editorconfig | 186 - .eslintrc.js | 1 - .gitattributes | 49 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 --- .github/workflows/publish.yml | 247 - .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 128 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/dist/test.js | 40 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 45 files changed, 6208 insertions(+), 6611 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 13e9c39..0000000 --- a/.editorconfig +++ /dev/null @@ -1,186 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index f497cbe..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2023-10-01T05:44:45.917Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index ab56cca..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index 3acd3a9..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA corresponding to v0.11.0 - uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index c1c45e7..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index e0d7511..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA corresponding to v3.1.3 - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA corresponding to v3.0.3: - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 265afda..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -244,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 536f5bc..0ffead5 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..97aa7c1 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.0-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.0-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.0-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index fecf7b5..798789f 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.1.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.1.0", - "@stdlib/array-base-zeros": "^0.1.1", - "@stdlib/blas-ext-base-grev": "^0.1.0", - "@stdlib/ndarray-base-numel": "^0.1.0", - "@stdlib/ndarray-base-shape2strides": "^0.1.0", - "@stdlib/ndarray-base-vind2bind": "^0.1.0", - "@stdlib/types": "^0.1.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.0", - "@stdlib/error-tools-fmtprodmsg": "^0.1.0" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.1.0", - "@stdlib/array-base-zero-to": "^0.1.0", - "@stdlib/array-float64": "^0.1.0", - "@stdlib/assert-has-own-property": "^0.1.0", - "@stdlib/assert-is-array": "^0.1.0", - "@stdlib/assert-is-float64array": "^0.1.0", - "@stdlib/bench": "^0.1.0", - "@stdlib/math-base-special-abs": "^0.1.0", - "@stdlib/utils-nary-function": "^0.1.0", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..b3f8bdd --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index 02a69b1..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 81e7f6c5c3466f7636eaffc129d90b5934930016 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 5 Oct 2023 20:40:09 +0000 Subject: [PATCH 31/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9f96281..600bc23 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.1.1", "@stdlib/ndarray-base-vind2bind": "^0.1.1", "@stdlib/types": "^0.1.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", + "@stdlib/error-tools-fmtprodmsg": "^0.1.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.1.0", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From baa3526925075473e3dea194656b22a2ef6d25c5 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 7 Oct 2023 04:13:23 +0000 Subject: [PATCH 32/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 0ffead5..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 97aa7c1..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.0-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.0-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.0-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index b3f8bdd..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 59b5406df7d618bcce6e35eea8aba8ac3ef06da2 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 7 Oct 2023 04:14:19 +0000 Subject: [PATCH 33/85] Auto-generated commit --- .editorconfig | 186 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 --- .github/workflows/publish.yml | 247 - .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 128 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/dist/test.js | 40 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 44 files changed, 6208 insertions(+), 6610 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 13e9c39..0000000 --- a/.editorconfig +++ /dev/null @@ -1,186 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index ab56cca..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index 3acd3a9..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA corresponding to v0.11.0 - uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index c1c45e7..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index e0d7511..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA corresponding to v3.1.3 - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA corresponding to v3.0.3: - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 265afda..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -244,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 536f5bc..0ffead5 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..81d5fa7 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 600bc23..798789f 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.1.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.1.0", - "@stdlib/array-base-zeros": "^0.1.1", - "@stdlib/blas-ext-base-grev": "^0.1.0", - "@stdlib/ndarray-base-numel": "^0.1.1", - "@stdlib/ndarray-base-shape2strides": "^0.1.1", - "@stdlib/ndarray-base-vind2bind": "^0.1.1", - "@stdlib/types": "^0.1.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", - "@stdlib/error-tools-fmtprodmsg": "^0.1.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.1.0", - "@stdlib/array-base-zero-to": "^0.1.0", - "@stdlib/array-float64": "^0.1.0", - "@stdlib/assert-has-own-property": "^0.1.1", - "@stdlib/assert-is-array": "^0.1.1", - "@stdlib/assert-is-float64array": "^0.1.1", - "@stdlib/bench": "^0.1.0", - "@stdlib/math-base-special-abs": "^0.1.0", - "@stdlib/utils-nary-function": "^0.1.0", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..0824341 --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index 02a69b1..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 742df8480860005e358acb85122022eb042148d8 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Wed, 1 Nov 2023 18:24:01 +0000 Subject: [PATCH 34/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cac1dc8..2b009ab 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.1.1", "@stdlib/ndarray-base-vind2bind": "^0.1.1", "@stdlib/types": "^0.1.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", + "@stdlib/error-tools-fmtprodmsg": "^0.1.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.1.0", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 9e2ba80510d8b804f499c7577b68ac2944d2259f Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 3 Nov 2023 03:05:15 +0000 Subject: [PATCH 35/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 0ffead5..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 81d5fa7..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 0824341..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 29a592c3a729c57793b6768933f34e818ee9efdb Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 3 Nov 2023 03:06:03 +0000 Subject: [PATCH 36/85] Auto-generated commit --- .editorconfig | 186 - .eslintrc.js | 1 - .gitattributes | 49 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 --- .github/workflows/publish.yml | 255 - .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 128 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 45 files changed, 6208 insertions(+), 6612 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 13e9c39..0000000 --- a/.editorconfig +++ /dev/null @@ -1,186 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index 8ce9d3e..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2023-11-01T06:06:39.622Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index ab56cca..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index 3acd3a9..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA corresponding to v0.11.0 - uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index c1c45e7..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index e0d7511..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA corresponding to v3.1.3 - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA corresponding to v3.0.3: - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 265afda..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -244,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 536f5bc..0ffead5 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..81d5fa7 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 2b009ab..798789f 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.1.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.1.0", - "@stdlib/array-base-zeros": "^0.1.1", - "@stdlib/blas-ext-base-grev": "^0.1.0", - "@stdlib/ndarray-base-numel": "^0.1.1", - "@stdlib/ndarray-base-shape2strides": "^0.1.1", - "@stdlib/ndarray-base-vind2bind": "^0.1.1", - "@stdlib/types": "^0.1.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", - "@stdlib/error-tools-fmtprodmsg": "^0.1.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.1.0", - "@stdlib/array-base-zero-to": "^0.1.0", - "@stdlib/array-float64": "^0.1.1", - "@stdlib/assert-has-own-property": "^0.1.1", - "@stdlib/assert-is-array": "^0.1.1", - "@stdlib/assert-is-float64array": "^0.1.1", - "@stdlib/bench": "^0.1.0", - "@stdlib/math-base-special-abs": "^0.1.1", - "@stdlib/utils-nary-function": "^0.1.0", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..1d6582e --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 21c012cf39c320351d119f104b319e4a65923252 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 12 Nov 2023 21:24:37 +0000 Subject: [PATCH 37/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6dbdc54..e212ed6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.1.1", "@stdlib/ndarray-base-vind2bind": "^0.1.1", "@stdlib/types": "^0.2.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", + "@stdlib/error-tools-fmtprodmsg": "^0.1.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.1.0", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 3473496da98d490a90da85e5b79f8f9d7a8c7b21 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 12 Nov 2023 21:56:02 +0000 Subject: [PATCH 38/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 0ffead5..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* tslint:disable:max-file-line-count */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; // tslint:disable-line:no-single-element-tuple-type - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 81d5fa7..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 1d6582e..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From aac3830d7a7df91415344612703116009f2c6f39 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 12 Nov 2023 21:56:43 +0000 Subject: [PATCH 39/85] Auto-generated commit --- .editorconfig | 186 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 --- .github/workflows/publish.yml | 255 - .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 128 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 44 files changed, 6208 insertions(+), 6611 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 13e9c39..0000000 --- a/.editorconfig +++ /dev/null @@ -1,186 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tslint.json` files: -[tslint.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index ab56cca..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index 3acd3a9..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA corresponding to v0.11.0 - uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index c1c45e7..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index e0d7511..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA corresponding to v3.1.3 - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA corresponding to v3.0.3: - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 265afda..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -244,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 81e56bd..d582130 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..81d5fa7 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index e212ed6..798789f 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.1.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.1.0", - "@stdlib/array-base-zeros": "^0.1.1", - "@stdlib/blas-ext-base-grev": "^0.1.0", - "@stdlib/ndarray-base-numel": "^0.1.1", - "@stdlib/ndarray-base-shape2strides": "^0.1.1", - "@stdlib/ndarray-base-vind2bind": "^0.1.1", - "@stdlib/types": "^0.2.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", - "@stdlib/error-tools-fmtprodmsg": "^0.1.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.1.0", - "@stdlib/array-base-zero-to": "^0.1.0", - "@stdlib/array-float64": "^0.1.1", - "@stdlib/assert-has-own-property": "^0.1.1", - "@stdlib/assert-is-array": "^0.1.1", - "@stdlib/assert-is-float64array": "^0.1.1", - "@stdlib/bench": "^0.2.0", - "@stdlib/math-base-special-abs": "^0.1.1", - "@stdlib/utils-nary-function": "^0.1.0", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..32340f4 --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 45c217d1d1afd46c99ba455bf1065c8daa1c33f3 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 1 Dec 2023 14:31:14 +0000 Subject: [PATCH 40/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e1d4946..4484360 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.1.1", "@stdlib/ndarray-base-vind2bind": "^0.1.1", "@stdlib/types": "^0.2.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", + "@stdlib/error-tools-fmtprodmsg": "^0.1.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.1.0", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 13e41e8853a8f161eabb9085e6b7e156390649cb Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 2 Dec 2023 13:01:44 +0000 Subject: [PATCH 41/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d582130..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 81d5fa7..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 32340f4..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From acdf356e8504cfab5b5d98349094dcc79ef991b2 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 2 Dec 2023 13:02:30 +0000 Subject: [PATCH 42/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 --- .github/workflows/publish.yml | 255 - .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 128 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 227 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 45 files changed, 6208 insertions(+), 6607 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index 58a7c4b..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2023-12-01T06:10:23.066Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index ab56cca..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index 3acd3a9..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA corresponding to v0.11.0 - uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index c1c45e7..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index e0d7511..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA corresponding to v3.1.3 - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA corresponding to v3.0.3: - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 265afda..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA corresponding to v4.1.0 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 16 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -244,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index fcced95..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 81e56bd..d582130 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..81d5fa7 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 4484360..798789f 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.1.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.1.0", - "@stdlib/array-base-zeros": "^0.1.1", - "@stdlib/blas-ext-base-grev": "^0.1.0", - "@stdlib/ndarray-base-numel": "^0.1.1", - "@stdlib/ndarray-base-shape2strides": "^0.1.1", - "@stdlib/ndarray-base-vind2bind": "^0.1.1", - "@stdlib/types": "^0.2.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", - "@stdlib/error-tools-fmtprodmsg": "^0.1.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.1.0", - "@stdlib/array-base-zero-to": "^0.1.0", - "@stdlib/array-float64": "^0.1.1", - "@stdlib/assert-has-own-property": "^0.1.1", - "@stdlib/assert-is-array": "^0.1.1", - "@stdlib/assert-is-float64array": "^0.1.1", - "@stdlib/bench": "^0.2.1", - "@stdlib/math-base-special-abs": "^0.1.1", - "@stdlib/utils-nary-function": "^0.1.0", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..ed723cf --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From ef388013518b8bb4191b7759f328171b5afcb877 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 1 Jan 2024 08:45:15 +0000 Subject: [PATCH 43/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 87e18de..79a052d 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.1.1", "@stdlib/ndarray-base-vind2bind": "^0.1.1", "@stdlib/types": "^0.2.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", + "@stdlib/error-tools-fmtprodmsg": "^0.1.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.1.0", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 1d189c3285a0d156cf36f0a183f357362214a4e0 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 1 Jan 2024 15:22:54 +0000 Subject: [PATCH 44/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d582130..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 81d5fa7..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2023 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index ed723cf..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 42265956d4fb80ef8e55f3259a22cee3e3da4fca Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 1 Jan 2024 15:23:17 +0000 Subject: [PATCH 45/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 --- .github/workflows/publish.yml | 255 - .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 128 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 228 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 46 files changed, 6208 insertions(+), 6613 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index 50b0de9..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2024-01-01T05:40:58.179Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 30656c4..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index 3acd3a9..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA corresponding to v0.11.0 - uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index c92f5c4..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 2cbaf94..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA corresponding to v3.1.3 - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index e1e3539..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -244,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 81e56bd..d582130 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..4c22f84 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 79a052d..798789f 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.1.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.1.0", - "@stdlib/array-base-zeros": "^0.1.1", - "@stdlib/blas-ext-base-grev": "^0.1.0", - "@stdlib/ndarray-base-numel": "^0.1.1", - "@stdlib/ndarray-base-shape2strides": "^0.1.1", - "@stdlib/ndarray-base-vind2bind": "^0.1.1", - "@stdlib/types": "^0.2.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", - "@stdlib/error-tools-fmtprodmsg": "^0.1.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.1.0", - "@stdlib/array-base-zero-to": "^0.1.0", - "@stdlib/array-float64": "^0.1.1", - "@stdlib/assert-has-own-property": "^0.1.1", - "@stdlib/assert-is-array": "^0.1.1", - "@stdlib/assert-is-float64array": "^0.1.1", - "@stdlib/math-base-special-abs": "^0.1.1", - "@stdlib/utils-nary-function": "^0.1.0", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..cc7f2e2 --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From fab1175ea4aa17950de7d908169507f6f63fb131 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 7 Jan 2024 22:10:36 +0000 Subject: [PATCH 46/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 87e18de..79a052d 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.1.1", "@stdlib/ndarray-base-vind2bind": "^0.1.1", "@stdlib/types": "^0.2.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", + "@stdlib/error-tools-fmtprodmsg": "^0.1.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.1.0", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From f448f63fcc7cce31a850b1f865cabc04273fbc07 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 7 Jan 2024 22:25:45 +0000 Subject: [PATCH 47/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d582130..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( `@stdlib/array/float64` ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 4c22f84..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index cc7f2e2..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From c72981a82ec6223dd64ec286a5ff00d32409247b Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 7 Jan 2024 22:26:07 +0000 Subject: [PATCH 48/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 --- .github/workflows/publish.yml | 255 - .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 128 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 228 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 45 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 53 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 45 files changed, 6208 insertions(+), 6612 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 30656c4..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index 3acd3a9..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA corresponding to v0.11.0 - uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index c92f5c4..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 2cbaf94..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA corresponding to v3.1.3 - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index e1e3539..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA corresponding to v3.8.1 - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -244,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 6b3c88a..0000000 --- a/branches.md +++ /dev/null @@ -1,53 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers. -- **deno**: [Deno][deno-url] branch for use in Deno. -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments. - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..4c22f84 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 79a052d..798789f 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.1.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.1.0", - "@stdlib/array-base-zeros": "^0.1.1", - "@stdlib/blas-ext-base-grev": "^0.1.0", - "@stdlib/ndarray-base-numel": "^0.1.1", - "@stdlib/ndarray-base-shape2strides": "^0.1.1", - "@stdlib/ndarray-base-vind2bind": "^0.1.1", - "@stdlib/types": "^0.2.0", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", - "@stdlib/error-tools-fmtprodmsg": "^0.1.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.1.0", - "@stdlib/array-base-zero-to": "^0.1.0", - "@stdlib/array-float64": "^0.1.1", - "@stdlib/assert-has-own-property": "^0.1.1", - "@stdlib/assert-is-array": "^0.1.1", - "@stdlib/assert-is-float64array": "^0.1.1", - "@stdlib/math-base-special-abs": "^0.1.1", - "@stdlib/utils-nary-function": "^0.1.0", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..e2c3e1a --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 5d811985b4c2568736f05b5394dcc756f11aa6cd Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 15 Feb 2024 01:27:13 +0000 Subject: [PATCH 49/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 80d95d5..c3e47f8 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.0", "@stdlib/ndarray-base-vind2bind": "^0.2.0", "@stdlib/types": "^0.3.1", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.0" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.0", + "@stdlib/error-tools-fmtprodmsg": "^0.2.0" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.0", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 449b6f9a28f568dc54365e00e17e0459dc791ebc Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 15 Feb 2024 04:59:47 +0000 Subject: [PATCH 50/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 4c22f84..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.1.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.1.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.1.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.1.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.1.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index e2c3e1a..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 7bf947b72ea1b4eb818791abfc681769c318e1c3 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 15 Feb 2024 05:00:06 +0000 Subject: [PATCH 51/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 --- .github/workflows/publish.yml | 255 - .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 132 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 228 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 47 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 6177 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 45 files changed, 6208 insertions(+), 6621 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index e7b9095..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA corresponding to v3.1.3 - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 9106b5d..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -246,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..b3b1dae --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.0-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.0-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.0-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.0-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index c3e47f8..54348f2 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.0", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.0", - "@stdlib/array-base-zeros": "^0.2.0", - "@stdlib/blas-ext-base-grev": "^0.2.0", - "@stdlib/ndarray-base-numel": "^0.2.0", - "@stdlib/ndarray-base-shape2strides": "^0.2.0", - "@stdlib/ndarray-base-vind2bind": "^0.2.0", - "@stdlib/types": "^0.3.1", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.0", - "@stdlib/error-tools-fmtprodmsg": "^0.2.0" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.0", - "@stdlib/array-base-zero-to": "^0.1.0", - "@stdlib/array-float64": "^0.2.0", - "@stdlib/assert-has-own-property": "^0.2.0", - "@stdlib/assert-is-array": "^0.2.0", - "@stdlib/assert-is-float64array": "^0.2.0", - "@stdlib/math-base-special-abs": "^0.2.0", - "@stdlib/utils-nary-function": "^0.2.0", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..9567bd4 --- /dev/null +++ b/stats.html @@ -0,0 +1,6177 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From e8c77960cedcceb7db6fdb403e6b3248f2da54fd Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 15 Feb 2024 06:40:01 +0000 Subject: [PATCH 52/85] Update README.md for ESM bundle v0.2.0 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a0414e6..fdda513 100644 --- a/README.md +++ b/README.md @@ -44,13 +44,13 @@ limitations under the License. ## Usage ```javascript -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.0-esm/index.mjs'; ``` You can also import the following named exports from the package: ```javascript -import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.0-esm/index.mjs'; ``` #### flattenBy( x, shape, colexicographic, clbk\[, thisArg] ) @@ -161,7 +161,7 @@ y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); import naryFunction from 'https://cdn.jsdelivr.net/gh/stdlib-js/utils-nary-function@esm/index.mjs'; import abs from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-abs@esm/index.mjs'; -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.0-esm/index.mjs'; var fcn = naryFunction( abs, 1 ); From 9735f0a54255c04b47c32893fe9eee59192e2003 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 15 Feb 2024 06:40:01 +0000 Subject: [PATCH 53/85] Auto-generated commit --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fdda513..39e5a90 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,11 @@ limitations under the License. ## Usage +```javascript +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +``` +The previous example will load the latest bundled code from the esm branch. Alternatively, you may load a specific version by loading the file from one of the [tagged bundles](https://github.com/stdlib-js/array-base-flatten-by/tags). For example, + ```javascript import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.0-esm/index.mjs'; ``` @@ -50,7 +55,7 @@ import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten- You can also import the following named exports from the package: ```javascript -import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.0-esm/index.mjs'; +import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; ``` #### flattenBy( x, shape, colexicographic, clbk\[, thisArg] ) @@ -161,7 +166,7 @@ y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); import naryFunction from 'https://cdn.jsdelivr.net/gh/stdlib-js/utils-nary-function@esm/index.mjs'; import abs from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-abs@esm/index.mjs'; -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.0-esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; var fcn = naryFunction( abs, 1 ); From bc60b124386896d4283f3703162f0ecea7044527 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 25 Feb 2024 20:07:36 +0000 Subject: [PATCH 54/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7d665de..b01ee11 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.1", "@stdlib/ndarray-base-vind2bind": "^0.2.1", "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", + "@stdlib/error-tools-fmtprodmsg": "^0.2.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.1", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 892786329dd3812fd1fcde7f4a304782bfb35f47 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 25 Feb 2024 21:31:58 +0000 Subject: [PATCH 55/85] Remove files --- index.d.ts | 1127 --------- index.mjs | 4 - index.mjs.map | 1 - stats.html | 6177 ------------------------------------------------- 4 files changed, 7309 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index b3b1dae..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.1.0-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.0-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.0-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.0-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.0-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.1.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.0-esm/index.mjs";function a(s,e,r,t,n,i,d,m,o,l,j){var p,v,h,f,b;for(p=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAyFA,SAASA,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EA5HtB,SA6HTT,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 9567bd4..0000000 --- a/stats.html +++ /dev/null @@ -1,6177 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 30bdc3c84b43218d9a8c84713203c752fb2fbbbb Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 25 Feb 2024 21:32:21 +0000 Subject: [PATCH 56/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 ---- .github/workflows/publish.yml | 249 -- .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 132 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 228 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 --- README.md | 47 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ----- test/test.js | 40 - test/test.main.js | 774 ---- 45 files changed, 4873 insertions(+), 6615 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 9106b5d..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -246,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..ea24bad --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index b01ee11..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.1", - "@stdlib/array-base-zeros": "^0.2.1", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.1", - "@stdlib/ndarray-base-shape2strides": "^0.2.1", - "@stdlib/ndarray-base-vind2bind": "^0.2.1", - "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", - "@stdlib/error-tools-fmtprodmsg": "^0.2.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.1", - "@stdlib/array-base-zero-to": "^0.2.0", - "@stdlib/array-float64": "^0.2.1", - "@stdlib/assert-has-own-property": "^0.2.1", - "@stdlib/assert-is-array": "^0.2.1", - "@stdlib/assert-is-float64array": "^0.2.1", - "@stdlib/math-base-special-abs": "^0.2.1", - "@stdlib/utils-nary-function": "^0.2.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..ad6ef2b --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From f740d6e24a58261617f4a16f0849fe4a5e428ad1 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 25 Feb 2024 22:11:43 +0000 Subject: [PATCH 57/85] Update README.md for ESM bundle v0.2.1 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5a55e24..4fbef36 100644 --- a/README.md +++ b/README.md @@ -44,13 +44,13 @@ limitations under the License. ## Usage ```javascript -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.1-esm/index.mjs'; ``` You can also import the following named exports from the package: ```javascript -import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.1-esm/index.mjs'; ``` #### flattenBy( x, shape, colexicographic, clbk\[, thisArg] ) @@ -161,7 +161,7 @@ y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); import naryFunction from 'https://cdn.jsdelivr.net/gh/stdlib-js/utils-nary-function@esm/index.mjs'; import abs from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-abs@esm/index.mjs'; -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.1-esm/index.mjs'; var fcn = naryFunction( abs, 1 ); From 01da8fccee03338c70874eaf460d9ec283e71b74 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 25 Feb 2024 22:11:44 +0000 Subject: [PATCH 58/85] Auto-generated commit --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4fbef36..0deb6e3 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,11 @@ limitations under the License. ## Usage +```javascript +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; +``` +The previous example will load the latest bundled code from the esm branch. Alternatively, you may load a specific version by loading the file from one of the [tagged bundles](https://github.com/stdlib-js/array-base-flatten-by/tags). For example, + ```javascript import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.1-esm/index.mjs'; ``` @@ -50,7 +55,7 @@ import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten- You can also import the following named exports from the package: ```javascript -import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.1-esm/index.mjs'; +import { assign } from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; ``` #### flattenBy( x, shape, colexicographic, clbk\[, thisArg] ) @@ -161,7 +166,7 @@ y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); import naryFunction from 'https://cdn.jsdelivr.net/gh/stdlib-js/utils-nary-function@esm/index.mjs'; import abs from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-abs@esm/index.mjs'; -import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@v0.2.1-esm/index.mjs'; +import flattenBy from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-flatten-by@esm/index.mjs'; var fcn = naryFunction( abs, 1 ); From 2b210ef9111a5d58f73730db91c9b69fab36f5ce Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 1 Mar 2024 08:30:19 +0000 Subject: [PATCH 59/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1ac6dc0..3bbc5d6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.1", "@stdlib/ndarray-base-vind2bind": "^0.2.1", "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", + "@stdlib/error-tools-fmtprodmsg": "^0.2.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.1", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 955a9ebb0a2d0d42c06104b9aab293556b754156 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 1 Mar 2024 14:18:05 +0000 Subject: [PATCH 60/85] Remove files --- index.d.ts | 1127 ------------ index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 5974 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index ea24bad..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.0-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index ad6ef2b..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From eb9da434d2b40d0ffe5808e343b253b6f826790c Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 1 Mar 2024 14:18:26 +0000 Subject: [PATCH 61/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 ---- .github/workflows/publish.yml | 249 -- .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 132 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 229 - .npmrc | 28 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 --- README.md | 47 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ----- test/test.js | 40 - test/test.main.js | 774 ---- 46 files changed, 4873 insertions(+), 6617 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index 7c0fd74..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2024-03-01T06:08:12.313Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index 9106b5d..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA corresponding to v2.0.0 - uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -246,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..ce92a60 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3bbc5d6..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.1", - "@stdlib/array-base-zeros": "^0.2.1", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.1", - "@stdlib/ndarray-base-shape2strides": "^0.2.1", - "@stdlib/ndarray-base-vind2bind": "^0.2.1", - "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", - "@stdlib/error-tools-fmtprodmsg": "^0.2.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.1", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/array-float64": "^0.2.1", - "@stdlib/assert-has-own-property": "^0.2.1", - "@stdlib/assert-is-array": "^0.2.1", - "@stdlib/assert-is-float64array": "^0.2.1", - "@stdlib/math-base-special-abs": "^0.2.1", - "@stdlib/utils-nary-function": "^0.2.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..0d1ee9a --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From ef3fade31d6e7024585530978bb6f7642fc7151f Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 1 Apr 2024 07:46:31 +0000 Subject: [PATCH 62/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1ac6dc0..3bbc5d6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.1", "@stdlib/ndarray-base-vind2bind": "^0.2.1", "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", + "@stdlib/error-tools-fmtprodmsg": "^0.2.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.1", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 2309115b77ab7b407cc3f83874f71aaf6224f6a3 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 1 Apr 2024 13:18:27 +0000 Subject: [PATCH 63/85] Remove files --- index.d.ts | 1127 ------------ index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 5974 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index ce92a60..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 0d1ee9a..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 3ed7342b47c05f2aa480d485e374a46dbd748d11 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 1 Apr 2024 13:18:42 +0000 Subject: [PATCH 64/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 ---- .github/workflows/publish.yml | 249 -- .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 132 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 --- README.md | 47 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ----- test/test.js | 40 - test/test.main.js | 774 ---- 46 files changed, 4873 insertions(+), 6620 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index 15a8bd1..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2024-04-01T05:23:55.733Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index ec90164..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA - uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -246,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..ce92a60 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3bbc5d6..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.1", - "@stdlib/array-base-zeros": "^0.2.1", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.1", - "@stdlib/ndarray-base-shape2strides": "^0.2.1", - "@stdlib/ndarray-base-vind2bind": "^0.2.1", - "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", - "@stdlib/error-tools-fmtprodmsg": "^0.2.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.1", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/array-float64": "^0.2.1", - "@stdlib/assert-has-own-property": "^0.2.1", - "@stdlib/assert-is-array": "^0.2.1", - "@stdlib/assert-is-float64array": "^0.2.1", - "@stdlib/math-base-special-abs": "^0.2.1", - "@stdlib/utils-nary-function": "^0.2.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..0d1ee9a --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From c740f43a8c7934978b60c9af340b9e20ceadc0f6 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 12 Apr 2024 03:59:49 +0000 Subject: [PATCH 65/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1ac6dc0..3bbc5d6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.1", "@stdlib/ndarray-base-vind2bind": "^0.2.1", "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", + "@stdlib/error-tools-fmtprodmsg": "^0.2.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.1", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 557c4f466fe0a667f8f8bd23b881be43deda8c44 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 12 Apr 2024 09:27:26 +0000 Subject: [PATCH 66/85] Remove files --- index.d.ts | 1127 ------------ index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 5974 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index ce92a60..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 0d1ee9a..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 18384c1d9849f74152054dc622c34957a02ad8a4 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 12 Apr 2024 09:27:41 +0000 Subject: [PATCH 67/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 49 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 797 ---- .github/workflows/publish.yml | 249 -- .github/workflows/test.yml | 100 - .github/workflows/test_bundles.yml | 189 - .github/workflows/test_coverage.yml | 134 - .github/workflows/test_install.yml | 86 - .gitignore | 188 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 --- README.md | 47 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ----- test/test.js | 40 - test/test.main.js | 774 ---- 45 files changed, 4873 insertions(+), 6621 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 10a16e6..0000000 --- a/.gitattributes +++ /dev/null @@ -1,49 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/deps/** linguist-vendored=false -/lib/node_modules/** linguist-vendored=false linguist-generated=false -test/fixtures/** linguist-vendored=false -tools/** linguist-vendored=false - -# Override what is considered "documentation" by GitHub's linguist: -examples/** linguist-documentation=false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index ec90164..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,797 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA - uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2 - with: - status: ${{ job.status }} - steps: ${{ toJson(steps) }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -246,7 +243,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..ce92a60 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3bbc5d6..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.1", - "@stdlib/array-base-zeros": "^0.2.1", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.1", - "@stdlib/ndarray-base-shape2strides": "^0.2.1", - "@stdlib/ndarray-base-vind2bind": "^0.2.1", - "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", - "@stdlib/error-tools-fmtprodmsg": "^0.2.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.1", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/array-float64": "^0.2.1", - "@stdlib/assert-has-own-property": "^0.2.1", - "@stdlib/assert-is-array": "^0.2.1", - "@stdlib/assert-is-float64array": "^0.2.1", - "@stdlib/math-base-special-abs": "^0.2.1", - "@stdlib/utils-nary-function": "^0.2.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..0d1ee9a --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From fed158cb68a2df3da4618f8823ff388409f0ad96 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 18 May 2024 03:01:42 +0000 Subject: [PATCH 68/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1ac6dc0..3bbc5d6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.1", "@stdlib/ndarray-base-vind2bind": "^0.2.1", "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", + "@stdlib/error-tools-fmtprodmsg": "^0.2.1" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.1", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From bc6236f9150de90bfc19e371cf9c1bdf6e403457 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 18 May 2024 03:02:13 +0000 Subject: [PATCH 69/85] Remove files --- index.d.ts | 1127 ------------ index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 5974 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index ce92a60..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 0d1ee9a..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From a5b34a4e7ba52b778f43664dfe22134a64d80d1a Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 18 May 2024 03:02:28 +0000 Subject: [PATCH 70/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 66 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 794 ---- .github/workflows/publish.yml | 248 -- .github/workflows/test.yml | 99 - .github/workflows/test_bundles.yml | 186 - .github/workflows/test_coverage.yml | 133 - .github/workflows/test_install.yml | 85 - .gitignore | 188 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 5 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 --- README.md | 49 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ----- test/test.js | 40 - test/test.main.js | 774 ---- 45 files changed, 4874 insertions(+), 6629 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 1c88e69..0000000 --- a/.gitattributes +++ /dev/null @@ -1,66 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/lib/node_modules/** -linguist-vendored -linguist-generated - -# Configure directories which should *not* be included in GitHub language statistics: -/deps/** linguist-vendored -/dist/** linguist-generated -/workshops/** linguist-vendored - -benchmark/** linguist-vendored -docs/* linguist-documentation -etc/** linguist-vendored -examples/** linguist-documentation -scripts/** linguist-vendored -test/** linguist-vendored -tools/** linguist-vendored - -# Configure files which should *not* be included in GitHub language statistics: -Makefile linguist-vendored -*.mk linguist-vendored -*.jl linguist-vendored -*.py linguist-vendored -*.R linguist-vendored - -# Configure files which should be included in GitHub language statistics: -docs/types/*.d.ts -linguist-documentation diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index f92a6c5..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,794 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA - uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2 - with: - status: ${{ job.status }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure git: - - name: 'Configure git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -252,7 +249,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. @@ -317,7 +314,7 @@ Copyright © 2016-2024. The Stdlib [Authors][stdlib-authors]. -[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten +[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten/tree/esm diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 65e81be..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param v - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..ce92a60 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 3bbc5d6..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.1", - "@stdlib/array-base-zeros": "^0.2.1", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.1", - "@stdlib/ndarray-base-shape2strides": "^0.2.1", - "@stdlib/ndarray-base-vind2bind": "^0.2.1", - "@stdlib/types": "^0.3.2", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.1", - "@stdlib/error-tools-fmtprodmsg": "^0.2.1" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.1", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/array-float64": "^0.2.1", - "@stdlib/assert-has-own-property": "^0.2.1", - "@stdlib/assert-is-array": "^0.2.1", - "@stdlib/assert-is-float64array": "^0.2.1", - "@stdlib/math-base-special-abs": "^0.2.1", - "@stdlib/utils-nary-function": "^0.2.1", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..0d1ee9a --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 0c5517166550736b885c3b800bcc863213d6a252 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 28 Sep 2024 21:15:43 +0000 Subject: [PATCH 71/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1dd80d7..047462a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", "@stdlib/types": "^0.4.1", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 86d7ceb5ce3071ab3dbc5997cb10e619db9f29cd Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 28 Sep 2024 21:19:25 +0000 Subject: [PATCH 72/85] Remove files --- index.d.ts | 1127 ------------ index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 5974 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index ce92a60..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.1-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.1-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.1-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.1-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 0d1ee9a..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 01a07345cd44f9eb27996dac7df51aeb088d2565 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 28 Sep 2024 21:19:37 +0000 Subject: [PATCH 73/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 66 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 794 ---- .github/workflows/publish.yml | 252 -- .github/workflows/test.yml | 99 - .github/workflows/test_bundles.yml | 186 - .github/workflows/test_coverage.yml | 133 - .github/workflows/test_install.yml | 85 - .gitignore | 190 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 157 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 --- README.md | 49 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 +++++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ----- test/test.js | 40 - test/test.main.js | 774 ---- 45 files changed, 4874 insertions(+), 6787 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 60d743f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = false - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 1c88e69..0000000 --- a/.gitattributes +++ /dev/null @@ -1,66 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/lib/node_modules/** -linguist-vendored -linguist-generated - -# Configure directories which should *not* be included in GitHub language statistics: -/deps/** linguist-vendored -/dist/** linguist-generated -/workshops/** linguist-vendored - -benchmark/** linguist-vendored -docs/* linguist-documentation -etc/** linguist-vendored -examples/** linguist-documentation -scripts/** linguist-vendored -test/** linguist-vendored -tools/** linguist-vendored - -# Configure files which should *not* be included in GitHub language statistics: -Makefile linguist-vendored -*.mk linguist-vendored -*.jl linguist-vendored -*.py linguist-vendored -*.R linguist-vendored - -# Configure files which should be included in GitHub language statistics: -docs/types/*.d.ts -linguist-documentation diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index f4575e9..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,794 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA - uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2 - with: - status: ${{ job.status }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -252,7 +249,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. @@ -317,7 +314,7 @@ Copyright © 2016-2024. The Stdlib [Authors][stdlib-authors]. -[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten +[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten/tree/esm diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index fe3bccd..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param value - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..438ee33 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.2-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.2-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 047462a..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.2", - "@stdlib/array-base-zeros": "^0.2.2", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.1", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/assert-has-own-property": "^0.2.2", - "@stdlib/assert-is-array": "^0.2.2", - "@stdlib/assert-is-float64array": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/utils-nary-function": "^0.2.2", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..27c754b --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 9191f022337054b5b233356cf6d939f71476dbc3 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 23 Dec 2024 02:05:17 +0000 Subject: [PATCH 74/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cbfd6f1..822562a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", "@stdlib/types": "^0.4.3", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 35c6a19d0dd3993e48daa1e679c36d9e4e5d7072 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 23 Dec 2024 02:28:37 +0000 Subject: [PATCH 75/85] Remove files --- index.d.ts | 1127 ------------ index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 5974 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 438ee33..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.2-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.2-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 27c754b..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From e8874ef81e302fd3181db6a6a7a46c92b85d0c87 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 23 Dec 2024 02:28:57 +0000 Subject: [PATCH 76/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 66 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 794 --- .github/workflows/publish.yml | 252 - .github/workflows/test.yml | 99 - .github/workflows/test_bundles.yml | 186 - .github/workflows/test_coverage.yml | 133 - .github/workflows/test_install.yml | 85 - .github/workflows/test_published_package.yml | 105 - .gitignore | 190 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 157 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 49 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 ++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 47 files changed, 4874 insertions(+), 6893 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .github/workflows/test_published_package.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 0779e8a..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true # Note: this disables using two spaces to force a hard line break, which is permitted in Markdown. As we don't typically follow that practice (TMK), we should be safe to automatically trim. - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 1c88e69..0000000 --- a/.gitattributes +++ /dev/null @@ -1,66 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/lib/node_modules/** -linguist-vendored -linguist-generated - -# Configure directories which should *not* be included in GitHub language statistics: -/deps/** linguist-vendored -/dist/** linguist-generated -/workshops/** linguist-vendored - -benchmark/** linguist-vendored -docs/* linguist-documentation -etc/** linguist-vendored -examples/** linguist-documentation -scripts/** linguist-vendored -test/** linguist-vendored -tools/** linguist-vendored - -# Configure files which should *not* be included in GitHub language statistics: -Makefile linguist-vendored -*.mk linguist-vendored -*.jl linguist-vendored -*.py linguist-vendored -*.R linguist-vendored - -# Configure files which should be included in GitHub language statistics: -docs/types/*.d.ts -linguist-documentation diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index 08a72aa..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2024-12-23T01:57:34.293Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index f4575e9..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,794 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA - uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2 - with: - status: ${{ job.status }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -252,7 +249,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. @@ -317,7 +314,7 @@ Copyright © 2016-2024. The Stdlib [Authors][stdlib-authors]. -[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten +[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten/tree/esm diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index fe3bccd..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param value - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..438ee33 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.2-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.2-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 822562a..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.2", - "@stdlib/array-base-zeros": "^0.2.2", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/assert-has-own-property": "^0.2.2", - "@stdlib/assert-is-array": "^0.2.2", - "@stdlib/assert-is-float64array": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/utils-nary-function": "^0.2.2", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..27c754b --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From faf8c47bb5199d2c1ff03f9b9f7825ede6de0f4f Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 30 Dec 2024 03:04:19 +0000 Subject: [PATCH 77/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cbfd6f1..822562a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", "@stdlib/types": "^0.4.3", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From fe66b96bde7fb0d3614ac40712c4542ad1dfc1f3 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 30 Dec 2024 04:16:50 +0000 Subject: [PATCH 78/85] Remove files --- index.d.ts | 1127 ------------ index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 5974 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 438ee33..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.2-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.2-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 27c754b..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 8d348163ac2220a3209ef83024f858dc8f3aec7c Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 30 Dec 2024 04:17:09 +0000 Subject: [PATCH 79/85] Auto-generated commit --- .editorconfig | 181 - .eslintrc.js | 1 - .gitattributes | 66 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 794 --- .github/workflows/publish.yml | 252 - .github/workflows/test.yml | 99 - .github/workflows/test_bundles.yml | 186 - .github/workflows/test_coverage.yml | 133 - .github/workflows/test_install.yml | 85 - .github/workflows/test_published_package.yml | 105 - .gitignore | 190 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 157 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 49 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 ++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 47 files changed, 4874 insertions(+), 6893 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .github/workflows/test_published_package.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 0779e8a..0000000 --- a/.editorconfig +++ /dev/null @@ -1,181 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 -insert_final_newline = false - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true # Note: this disables using two spaces to force a hard line break, which is permitted in Markdown. As we don't typically follow that practice (TMK), we should be safe to automatically trim. - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 1c88e69..0000000 --- a/.gitattributes +++ /dev/null @@ -1,66 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/lib/node_modules/** -linguist-vendored -linguist-generated - -# Configure directories which should *not* be included in GitHub language statistics: -/deps/** linguist-vendored -/dist/** linguist-generated -/workshops/** linguist-vendored - -benchmark/** linguist-vendored -docs/* linguist-documentation -etc/** linguist-vendored -examples/** linguist-documentation -scripts/** linguist-vendored -test/** linguist-vendored -tools/** linguist-vendored - -# Configure files which should *not* be included in GitHub language statistics: -Makefile linguist-vendored -*.mk linguist-vendored -*.jl linguist-vendored -*.py linguist-vendored -*.R linguist-vendored - -# Configure files which should be included in GitHub language statistics: -docs/types/*.d.ts -linguist-documentation diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index 1d7d2f1..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2024-12-30T02:42:01.225Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 3c83283..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index f4575e9..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,794 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA - uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2 - with: - status: ${{ job.status }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -252,7 +249,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. @@ -317,7 +314,7 @@ Copyright © 2016-2024. The Stdlib [Authors][stdlib-authors]. -[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten +[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten/tree/esm diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index fe3bccd..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param value - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..438ee33 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.2-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.2-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 822562a..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.2", - "@stdlib/array-base-zeros": "^0.2.2", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/assert-has-own-property": "^0.2.2", - "@stdlib/assert-is-array": "^0.2.2", - "@stdlib/assert-is-float64array": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/utils-nary-function": "^0.2.2", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..27c754b --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From 5293eaf528300acb65068a0a0e392b6b31c6d517 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 24 Feb 2025 01:07:12 +0000 Subject: [PATCH 80/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cbfd6f1..822562a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", "@stdlib/types": "^0.4.3", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 8c1525b4114cdf42449d5faa228a52656173545a Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 24 Feb 2025 01:27:51 +0000 Subject: [PATCH 81/85] Remove files --- index.d.ts | 1127 ------------ index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 5974 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 438ee33..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.2-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.2-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 27c754b..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 6c59ac739957dfa6b32d2095e5eb4dd57e76d13b Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 24 Feb 2025 01:28:07 +0000 Subject: [PATCH 82/85] Auto-generated commit --- .editorconfig | 180 - .eslintrc.js | 1 - .gitattributes | 66 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 794 --- .github/workflows/publish.yml | 252 - .github/workflows/test.yml | 99 - .github/workflows/test_bundles.yml | 186 - .github/workflows/test_coverage.yml | 133 - .github/workflows/test_install.yml | 85 - .github/workflows/test_published_package.yml | 105 - .gitignore | 194 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 157 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 49 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 ++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 47 files changed, 4874 insertions(+), 6896 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .github/workflows/test_published_package.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index dab5d2a..0000000 --- a/.editorconfig +++ /dev/null @@ -1,180 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true # Note: this disables using two spaces to force a hard line break, which is permitted in Markdown. As we don't typically follow that practice (TMK), we should be safe to automatically trim. - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 1c88e69..0000000 --- a/.gitattributes +++ /dev/null @@ -1,66 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/lib/node_modules/** -linguist-vendored -linguist-generated - -# Configure directories which should *not* be included in GitHub language statistics: -/deps/** linguist-vendored -/dist/** linguist-generated -/workshops/** linguist-vendored - -benchmark/** linguist-vendored -docs/* linguist-documentation -etc/** linguist-vendored -examples/** linguist-documentation -scripts/** linguist-vendored -test/** linguist-vendored -tools/** linguist-vendored - -# Configure files which should *not* be included in GitHub language statistics: -Makefile linguist-vendored -*.mk linguist-vendored -*.jl linguist-vendored -*.py linguist-vendored -*.R linguist-vendored - -# Configure files which should be included in GitHub language statistics: -docs/types/*.d.ts -linguist-documentation diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index 5e0fecf..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2025-02-24T01:01:28.025Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index ec42807..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/contributing/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index f4575e9..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,794 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA - uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2 - with: - status: ${{ job.status }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -252,7 +249,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. @@ -317,7 +314,7 @@ Copyright © 2016-2025. The Stdlib [Authors][stdlib-authors]. -[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten +[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten/tree/esm diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index fe3bccd..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param value - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..c089b89 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2025 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.2-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.2-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 822562a..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.2", - "@stdlib/array-base-zeros": "^0.2.2", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/assert-has-own-property": "^0.2.2", - "@stdlib/assert-is-array": "^0.2.2", - "@stdlib/assert-is-float64array": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/utils-nary-function": "^0.2.2", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..27c754b --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); From fd2a97ad92c016fd1ff5c082c61efdc1521d1e64 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 7 Apr 2025 01:54:21 +0000 Subject: [PATCH 83/85] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cbfd6f1..822562a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@stdlib/ndarray-base-shape2strides": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", "@stdlib/types": "^0.4.3", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2" + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-base-filled": "^0.2.2", @@ -98,4 +99,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 8cfb6e3c986e2df6a28797eff0da462988e4ddc8 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 7 Apr 2025 02:03:41 +0000 Subject: [PATCH 84/85] Remove files --- index.d.ts | 1127 ------------ index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 5974 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.mjs delete mode 100644 index.mjs.map delete mode 100644 stats.html diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index d6e29ef..0000000 --- a/index.d.ts +++ /dev/null @@ -1,1127 +0,0 @@ -/* -* @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. -*/ - -/* eslint-disable max-lines */ - -// TypeScript Version: 4.1 - -/// - -import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; - -/** -* One-dimensional array shape. -*/ -type Shape1D = [ number ]; - -/** -* Two-dimensional array shape. -*/ -type Shape2D = [ number, number ]; - -/** -* Three-dimensional array shape. -*/ -type Shape3D = [ number, number, number ]; - -/** -* Four-dimensional array shape. -*/ -type Shape4D = [ number, number, number, number ]; - -/** -* Five-dimensional array shape. -*/ -type Shape5D = [ number, number, number, number, number ]; - -/** -* Six-dimensional array shape. -*/ -type Shape6D = [ number, number, number, number, number, number ]; - -/** -* Seven-dimensional array shape. -*/ -type Shape7D = [ number, number, number, number, number, number, number ]; - -/** -* Eight-dimensional array shape. -*/ -type Shape8D = [ number, number, number, number, number, number, number, number ]; - -/** -* Nine-dimensional array shape. -*/ -type Shape9D = [ number, number, number, number, number, number, number, number, number ]; - -/** -* Ten-dimensional array shape. -*/ -type Shape10D = [ number, number, number, number, number, number, number, number, number, number ]; - -/** -* Nullary callback function. -* -* @returns result -*/ -type Nullary = ( this: V ) => U; - -/** -* Unary callback function. -* -* @param value - array element -* @returns result -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Binary callback function. -* -* @param value - array element -* @param indices - element indices -* @returns result -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; // TODO: could consider whether to make indices a tuple of fixed length, but would require Binary1D, Binary2D, etc, etc. - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary1D = ( this: V, value: T, indices: Array, arr: Array1D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary2D = ( this: V, value: T, indices: Array, arr: Array2D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary3D = ( this: V, value: T, indices: Array, arr: Array3D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary4D = ( this: V, value: T, indices: Array, arr: Array4D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary5D = ( this: V, value: T, indices: Array, arr: Array5D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary6D = ( this: V, value: T, indices: Array, arr: Array6D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary7D = ( this: V, value: T, indices: Array, arr: Array7D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary8D = ( this: V, value: T, indices: Array, arr: Array8D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary9D = ( this: V, value: T, indices: Array, arr: Array9D ) => U; - -/** -* Ternary callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Ternary10D = ( this: V, value: T, indices: Array, arr: Array10D ) => U; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback1D = Nullary | Unary | Binary | Ternary1D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback2D = Nullary | Unary | Binary | Ternary2D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback3D = Nullary | Unary | Binary | Ternary3D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback4D = Nullary | Unary | Binary | Ternary4D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback5D = Nullary | Unary | Binary | Ternary5D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback6D = Nullary | Unary | Binary | Ternary6D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback7D = Nullary | Unary | Binary | Ternary7D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback8D = Nullary | Unary | Binary | Ternary8D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback9D = Nullary | Unary | Binary | Ternary9D; - -/** -* Callback function. -* -* @param value - array element -* @param indices - element indices -* @param arr - input array -* @returns result -*/ -type Callback10D = Nullary | Unary | Binary | Ternary10D; - -/** -* Interface describing `flattenBy`. -*/ -interface FlattenBy { - /** - * Flattens a one-dimensional nested array according to a callback function. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], false, scale ); - * // returns [ 2, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy( x, [ 2 ], true, scale ); - * // returns [ 2, 4 ] - */ - ( x: Array1D, shape: Shape1D, colexicographic: boolean, clbk: Callback1D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a two-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy( x, [ 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array2D, shape: Shape2D, colexicographic: boolean, clbk: Callback2D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a three-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy( x, [ 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array3D, shape: Shape3D, colexicographic: boolean, clbk: Callback3D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a four-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array4D, shape: Shape4D, colexicographic: boolean, clbk: Callback4D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a five-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array5D, shape: Shape5D, colexicographic: boolean, clbk: Callback5D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a six-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array6D, shape: Shape6D, colexicographic: boolean, clbk: Callback6D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a seven-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array7D, shape: Shape7D, colexicographic: boolean, clbk: Callback7D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens an eight-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array8D, shape: Shape8D, colexicographic: boolean, clbk: Callback8D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a nine-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array9D, shape: Shape9D, colexicographic: boolean, clbk: Callback9D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a ten-dimensional nested array according to a callback function. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns flattened array - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - ( x: Array10D, shape: Shape10D, colexicographic: boolean, clbk: Callback10D, thisArg?: ThisParameterType> ): Array; - - /** - * Flattens a one-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], false, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ 1, 2 ]; - * - * var out = flattenBy.assign( x, [ 2 ], true, new Float64Array( 2 ), 1, 0, scale ); - * // returns [ 2, 4 ] - */ - assign( x: Array1D, shape: Shape1D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback1D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ 1, 2 ], [ 3, 4 ] ]; - * - * var out = flattenBy.assign( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array2D, shape: Shape2D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback2D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a three-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array3D, shape: Shape3D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback3D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a four-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array4D, shape: Shape4D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback4D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a five-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array5D, shape: Shape5D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback5D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a six-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array6D, shape: Shape6D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback6D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a seven-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array7D, shape: Shape7D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback7D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens an eight-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array8D, shape: Shape8D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback8D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a nine-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array9D, shape: Shape9D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback9D, thisArg?: ThisParameterType> ): Collection; - - /** - * Flattens a ten-dimensional nested array according to a callback function and assigns elements to a provided output array. - * - * ## Notes - * - * - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). - * - * @param x - input array - * @param shape - array shape - * @param colexicographic - specifies whether to flatten array values in colexicographic order - * @param out - output array - * @param stride - output array stride - * @param offset - output array index offset - * @param clbk - callback function - * @param thisArg - callback execution context - * @returns output array - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 2, 3, 4 ] - * - * @example - * var Float64Array = require( '@stdlib/array-float64' ); - * - * function scale( v ) { - * return v * 2; - * } - * - * var x = [ [ [ [ [ [ [ [ [ [ 1, 2 ], [ 3, 4 ] ] ] ] ] ] ] ] ] ]; - * - * var out = flattenBy.assign( x, [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); - * // returns [ 1, 3, 2, 4 ] - */ - assign( x: Array10D, shape: Shape10D, colexicographic: boolean, out: Collection, stride: number, offset: number, clbk: Callback10D, thisArg?: ThisParameterType> ): Collection; -} - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param x - input array -* @param shape - array shape -* @param colexicographic - specifies whether to flatten array values in colexicographic order -* @param clbk - callback function -* @param thisArg - callback execution context -* @returns flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 1, 2, 3, 4 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 1, 3, 2, 4 ] -*/ -declare var flattenBy: FlattenBy; - - -// EXPORTS // - -export = flattenBy; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index c089b89..0000000 --- a/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2025 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 -/// -import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.2-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.2-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 27c754b..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From d656a57f3147a58540151c59c3a37eb48017fab6 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 7 Apr 2025 02:03:59 +0000 Subject: [PATCH 85/85] Auto-generated commit --- .editorconfig | 180 - .eslintrc.js | 1 - .gitattributes | 66 - .github/.keepalive | 1 - .github/PULL_REQUEST_TEMPLATE.md | 7 - .github/workflows/benchmark.yml | 64 - .github/workflows/cancel.yml | 57 - .github/workflows/close_pull_requests.yml | 54 - .github/workflows/examples.yml | 64 - .github/workflows/npm_downloads.yml | 112 - .github/workflows/productionize.yml | 794 --- .github/workflows/publish.yml | 252 - .github/workflows/test.yml | 99 - .github/workflows/test_bundles.yml | 186 - .github/workflows/test_coverage.yml | 133 - .github/workflows/test_install.yml | 85 - .github/workflows/test_published_package.yml | 105 - .gitignore | 194 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 157 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 49 +- SECURITY.md | 5 - benchmark/benchmark.js | 419 -- branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 7 - dist/index.js.map | 7 - docs/repl.txt | 106 - docs/types/test.ts | 340 -- examples/index.js | 85 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/assign.js | 230 - lib/index.js | 82 - lib/main.js | 72 - package.json | 69 +- stats.html | 4842 ++++++++++++++++++ test/dist/test.js | 33 - test/test.assign.js | 1103 ---- test/test.js | 40 - test/test.main.js | 774 --- 47 files changed, 4874 insertions(+), 6896 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js delete mode 100644 .gitattributes delete mode 100644 .github/.keepalive delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/benchmark.yml delete mode 100644 .github/workflows/cancel.yml delete mode 100644 .github/workflows/close_pull_requests.yml delete mode 100644 .github/workflows/examples.yml delete mode 100644 .github/workflows/npm_downloads.yml delete mode 100644 .github/workflows/productionize.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/test_bundles.yml delete mode 100644 .github/workflows/test_coverage.yml delete mode 100644 .github/workflows/test_install.yml delete mode 100644 .github/workflows/test_published_package.yml delete mode 100644 .gitignore delete mode 100644 .npmignore delete mode 100644 .npmrc delete mode 100644 CHANGELOG.md delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Makefile delete mode 100644 SECURITY.md delete mode 100644 benchmark/benchmark.js delete mode 100644 branches.md delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 docs/repl.txt delete mode 100644 docs/types/test.ts delete mode 100644 examples/index.js rename docs/types/index.d.ts => index.d.ts (99%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/assign.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.assign.js delete mode 100644 test/test.js delete mode 100644 test/test.main.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index dab5d2a..0000000 --- a/.editorconfig +++ /dev/null @@ -1,180 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# EditorConfig configuration file (see ). - -# Indicate that this file is a root-level configuration file: -root = true - -# Set properties for all files: -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Set properties for JavaScript files: -[*.{js,js.txt}] -indent_style = tab - -# Set properties for JavaScript ES module files: -[*.{mjs,mjs.txt}] -indent_style = tab - -# Set properties for JavaScript CommonJS files: -[*.{cjs,cjs.txt}] -indent_style = tab - -# Set properties for JSON files: -[*.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `cli_opts.json` files: -[cli_opts.json] -indent_style = tab - -# Set properties for TypeScript files: -[*.ts] -indent_style = tab - -# Set properties for Python files: -[*.{py,py.txt}] -indent_style = space -indent_size = 4 - -# Set properties for Julia files: -[*.{jl,jl.txt}] -indent_style = tab - -# Set properties for R files: -[*.{R,R.txt}] -indent_style = tab - -# Set properties for C files: -[*.{c,c.txt}] -indent_style = tab - -# Set properties for C header files: -[*.{h,h.txt}] -indent_style = tab - -# Set properties for C++ files: -[*.{cpp,cpp.txt}] -indent_style = tab - -# Set properties for C++ header files: -[*.{hpp,hpp.txt}] -indent_style = tab - -# Set properties for Fortran files: -[*.{f,f.txt}] -indent_style = space -indent_size = 2 - -# Set properties for shell files: -[*.{sh,sh.txt}] -indent_style = tab - -# Set properties for AWK files: -[*.{awk,awk.txt}] -indent_style = tab - -# Set properties for HTML files: -[*.{html,html.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for XML files: -[*.{xml,xml.txt}] -indent_style = tab -tab_width = 2 - -# Set properties for CSS files: -[*.{css,css.txt}] -indent_style = tab - -# Set properties for Makefiles: -[Makefile] -indent_style = tab - -[*.{mk,mk.txt}] -indent_style = tab - -# Set properties for Markdown files: -[*.{md,md.txt}] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true # Note: this disables using two spaces to force a hard line break, which is permitted in Markdown. As we don't typically follow that practice (TMK), we should be safe to automatically trim. - -# Set properties for `usage.txt` files: -[usage.txt] -indent_style = space -indent_size = 2 - -# Set properties for `repl.txt` files: -[repl.txt] -indent_style = space -indent_size = 4 - -# Set properties for `package.json` files: -[package.{json,json.txt}] -indent_style = space -indent_size = 2 - -# Set properties for `datapackage.json` files: -[datapackage.json] -indent_style = space -indent_size = 2 - -# Set properties for `manifest.json` files: -[manifest.json] -indent_style = space -indent_size = 2 - -# Set properties for `tsconfig.json` files: -[tsconfig.json] -indent_style = space -indent_size = 2 - -# Set properties for LaTeX files: -[*.{tex,tex.txt}] -indent_style = tab - -# Set properties for LaTeX Bibliography files: -[*.{bib,bib.txt}] -indent_style = tab - -# Set properties for YAML files: -[*.{yml,yml.txt}] -indent_style = space -indent_size = 2 - -# Set properties for GYP files: -[binding.gyp] -indent_style = space -indent_size = 2 - -[*.gypi] -indent_style = space -indent_size = 2 - -# Set properties for citation files: -[*.{cff,cff.txt}] -indent_style = space -indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 5f30286..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -/* For the `eslint` rules of this project, consult the main repository at https://github.com/stdlib-js/stdlib */ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 1c88e69..0000000 --- a/.gitattributes +++ /dev/null @@ -1,66 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2017 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. -#/ - -# Configuration file which assigns attributes to pathnames. -# -# [1]: https://git-scm.com/docs/gitattributes - -# Automatically normalize the line endings of any committed text files: -* text=auto - -# Override line endings for certain files on checkout: -*.crlf.csv text eol=crlf - -# Denote that certain files are binary and should not be modified: -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.gz binary -*.zip binary -*.7z binary -*.mp3 binary -*.mp4 binary -*.mov binary - -# Override what is considered "vendored" by GitHub's linguist: -/lib/node_modules/** -linguist-vendored -linguist-generated - -# Configure directories which should *not* be included in GitHub language statistics: -/deps/** linguist-vendored -/dist/** linguist-generated -/workshops/** linguist-vendored - -benchmark/** linguist-vendored -docs/* linguist-documentation -etc/** linguist-vendored -examples/** linguist-documentation -scripts/** linguist-vendored -test/** linguist-vendored -tools/** linguist-vendored - -# Configure files which should *not* be included in GitHub language statistics: -Makefile linguist-vendored -*.mk linguist-vendored -*.jl linguist-vendored -*.py linguist-vendored -*.R linguist-vendored - -# Configure files which should be included in GitHub language statistics: -docs/types/*.d.ts -linguist-documentation diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index efbc0e5..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2025-04-07T01:24:10.706Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index ec42807..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ - - -We are excited about your pull request, but unfortunately we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. - -If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. You may also consult the [development guide](https://github.com/stdlib-js/stdlib/blob/develop/docs/contributing/development.md) for help on developing stdlib. - -We look forward to receiving your contribution! :smiley: \ No newline at end of file diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index e4f10fe..0000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: benchmark - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run benchmarks: - benchmark: - - # Define a display name: - name: 'Run benchmarks' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run benchmarks: - - name: 'Run benchmarks' - run: | - npm run benchmark diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml deleted file mode 100644 index b5291db..0000000 --- a/.github/workflows/cancel.yml +++ /dev/null @@ -1,57 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: cancel - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to cancel existing workflow runs: - cancel: - - # Define a display name: - name: 'Cancel workflow runs' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Time limit: - timeout-minutes: 3 - - # Define the sequence of job steps... - steps: - - # Cancel existing workflow runs: - - name: 'Cancel existing workflow runs' - # Pin action to full length commit SHA - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1 - with: - workflow_id: >- - benchmark.yml, - examples.yml, - test.yml, - test_coverage.yml, - test_install.yml, - publish.yml - access_token: ${{ github.token }} diff --git a/.github/workflows/close_pull_requests.yml b/.github/workflows/close_pull_requests.yml deleted file mode 100644 index 5fe23f6..0000000 --- a/.github/workflows/close_pull_requests.yml +++ /dev/null @@ -1,54 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: close_pull_requests - -# Workflow triggers: -on: - pull_request_target: - types: [opened] - -# Workflow jobs: -jobs: - - # Define job to close all pull requests: - run: - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Close pull request - - name: 'Close pull request' - # Pin action to full length commit SHA corresponding to v3.1.2 - uses: superbrothers/close-pull-request@9c18513d320d7b2c7185fb93396d0c664d5d8448 - with: - comment: | - Thank you for submitting a pull request. :raised_hands: - - We greatly appreciate your willingness to submit a contribution. However, we are not accepting pull requests against this repository, as all development happens on the [main project repository](https://github.com/stdlib-js/stdlib). - - We kindly request that you submit this pull request against the [respective directory](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by) of the main repository where we’ll review and provide feedback. If this is your first stdlib contribution, be sure to read the [contributing guide](https://github.com/stdlib-js/stdlib/blob/develop/CONTRIBUTING.md) which provides guidelines and instructions for submitting contributions. - - Thank you again, and we look forward to receiving your contribution! :smiley: - - Best, - The stdlib team \ No newline at end of file diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml deleted file mode 100644 index 2984901..0000000 --- a/.github/workflows/examples.yml +++ /dev/null @@ -1,64 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2021 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. -#/ - -# Workflow name: -name: examples - -# Workflow triggers: -on: - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job to run the package examples... - examples: - - # Define display name: - name: 'Run examples' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - - # Checkout repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Run examples: - - name: 'Run examples' - run: | - npm run examples diff --git a/.github/workflows/npm_downloads.yml b/.github/workflows/npm_downloads.yml deleted file mode 100644 index 6eaad2f..0000000 --- a/.github/workflows/npm_downloads.yml +++ /dev/null @@ -1,112 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: npm_downloads - -# Workflow triggers: -on: - # Run this workflow weekly: - schedule: - # cron: ' ' - - cron: '40 4 * * 4' - - # Allow the workflow to be manually run: - workflow_dispatch: - -# Workflow jobs: -jobs: - - # Define a job for retrieving npm download counts... - npm_downloads: - - # Define display name: - name: 'Retrieve npm download counts' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - timeout-minutes: 10 - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Resolve package name: - - name: 'Resolve package name' - id: package_name - run: | - name=`node -e 'console.log(require("./package.json").name)' | tr -d '\n'` - echo "package_name=$name" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Fetch download data: - - name: 'Fetch data' - id: download_data - run: | - url="https://api.npmjs.org/downloads/range/$(date --date='1 year ago' '+%Y-%m-%d'):$(date '+%Y-%m-%d')/${{ steps.package_name.outputs.package_name }}" - echo "$url" - data=$(curl "$url") - mkdir ./tmp - echo "$data" > ./tmp/npm_downloads.json - echo "data=$data" >> $GITHUB_OUTPUT - timeout-minutes: 5 - - # Print summary of download data: - - name: 'Print summary' - run: | - echo "| Date | Downloads |" >> $GITHUB_STEP_SUMMARY - echo "|------|------------|" >> $GITHUB_STEP_SUMMARY - cat ./tmp/npm_downloads.json | jq -r ".downloads | .[-14:] | to_entries | map(\"| \(.value.day) | \(.value.downloads) |\") |.[]" >> $GITHUB_STEP_SUMMARY - - # Upload the download data: - - name: 'Upload data' - # Pin action to full length commit SHA - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - # Define a name for the uploaded artifact (ensuring a unique name for each job): - name: npm_downloads - - # Specify the path to the file to upload: - path: ./tmp/npm_downloads.json - - # Specify the number of days to retain the artifact (default is 90 days): - retention-days: 90 - timeout-minutes: 10 - if: success() - - # Send data to events server: - - name: 'Post data' - # Pin action to full length commit SHA - uses: distributhor/workflow-webhook@48a40b380ce4593b6a6676528cd005986ae56629 # v3.0.3 - env: - webhook_url: ${{ secrets.STDLIB_NPM_DOWNLOADS_URL }} - webhook_secret: ${{ secrets.STDLIB_WEBHOOK_SECRET }} - data: '{ "downloads": ${{ steps.download_data.outputs.data }} }' - timeout-minutes: 5 - if: success() diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml deleted file mode 100644 index f4575e9..0000000 --- a/.github/workflows/productionize.yml +++ /dev/null @@ -1,794 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2022 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. -#/ - -# Workflow name: -name: productionize - -# Workflow triggers: -on: - # Run workflow when a new commit is pushed to the main branch: - push: - branches: - - main - - # Allow the workflow to be manually run: - workflow_dispatch: - inputs: - require-passing-tests: - description: 'Require passing tests for creating bundles' - type: boolean - default: true - - # Run workflow upon completion of `publish` workflow run: - workflow_run: - workflows: ["publish"] - types: [completed] - - -# Concurrency group to prevent multiple concurrent executions: -concurrency: - group: productionize - cancel-in-progress: true - -# Workflow jobs: -jobs: - - # Define a job to create a production build... - productionize: - - # Define display name: - name: 'Productionize' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Define the sequence of job steps... - steps: - # Checkout main branch of repository: - - name: 'Checkout main branch' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - ref: main - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Create production branch: - - name: 'Create production branch' - run: | - git checkout -b production - - # Transform error messages: - - name: 'Transform error messages' - id: transform-error-messages - uses: stdlib-js/transform-errors-action@main - - # Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency: - - name: 'Update dependencies in package.json' - run: | - PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version) - if grep -q '"@stdlib/string-format"' package.json; then - sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json - else - node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );" - fi - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Transform error messages" - - # Push changes: - - name: 'Push changes' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" production --force - - # Define a job for running tests of the productionized code... - test: - - # Define a display name: - name: 'Run Tests' - - # Define the type of virtual host machine: - runs-on: 'ubuntu-latest' - - # Indicate that this job depends on the prior job finishing: - needs: productionize - - # Run this job regardless of the outcome of the prior job: - if: always() - - # Define the sequence of job steps... - steps: - - # Checkout the repository: - - name: 'Checkout repository' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - with: - # Use the `production` branch: - ref: production - - # Install Node.js: - - name: 'Install Node.js' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Build native add-on if present: - - name: 'Build native add-on (if present)' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - run: | - if [ -f "binding.gyp" ]; then - npm install node-gyp --no-save && ./node_modules/.bin/node-gyp rebuild - fi - - # Run tests: - - name: 'Run tests' - if: ${{ github.event.inputs.require-passing-tests == 'true' }} - id: tests - run: | - npm test || npm test || npm test - - # Define job to create a bundle for use in Deno... - deno: - - # Define display name: - name: 'Create Deno bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `deno` branch exists: - - name: 'Check if remote `deno` branch exists' - id: deno-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin deno - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `deno` exists, delete everything in branch and merge `production` into it - - name: 'If `deno` exists, delete everything in branch and merge `production` into it' - if: steps.deno-branch-exists.outputs.remote-exists - run: | - git checkout -b deno origin/deno - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `deno` does not exist, create `deno` branch: - - name: 'If `deno` does not exist, create `deno` branch' - if: ${{ steps.deno-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b deno - - # Copy files to deno directory: - - name: 'Copy files to deno directory' - run: | - mkdir -p deno - cp README.md LICENSE CONTRIBUTORS NOTICE ./deno - - # Copy TypeScript definitions to deno directory: - if [ -d index.d.ts ]; then - cp index.d.ts ./deno/index.d.ts - fi - if [ -e ./docs/types/index.d.ts ]; then - cp ./docs/types/index.d.ts ./deno/mod.d.ts - fi - - # Install Node.js: - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: Install production and development dependencies - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Bundle package for use in Deno: - - name: 'Bundle package for Deno' - id: deno-bundle - uses: stdlib-js/bundle-action@main - with: - target: 'deno' - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - # Replace links to other packages with links to the deno branch: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/deno/"; - - # Replace reference to `@stdlib/types` with CDN link: - find ./deno -type f -name '*.ts' -print0 | xargs -0 -r sed -Ei "s/\/\/\/ /\/\/\/ /g" - - # Change wording of project description to avoid reference to JavaScript and Node.js: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/a standard library for JavaScript and Node.js, /a standard library /g" - - # Rewrite all `require()`s to use jsDelivr links: - find ./deno -type f -name '*.md' -print0 | xargs -0 sed -Ei "/require\( '@stdlib\// { - s/(var|let|const)\s+([a-z0-9_]+)\s+=\s*require\( '([^']+)' \);/import \2 from \'\3\';/i - s/@stdlib/https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js/ - s/';/@deno\/mod.js';/ - }" - - # Rewrite first `import` to show importing of named exports if available: - exports=$(cat lib/index.js | \ - grep -E 'setReadOnly\(.*,.*,.*\)' | \ - sed -E 's/setReadOnly\((.*),(.*),(.*)\);/\2/' | \ - sed -E "s/'//g" | \ - sort) - if [ -n "$exports" ]; then - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\nimport\s+([a-zA-Z0-9_]+)\s+from\s*'([^']+)';\n\`\`\`/\`\`\`javascript\nimport \1 from '\2';\n\`\`\`\n\nYou can also import the following named exports from the package:\n\n\`\`\`javascript\nimport { $(echo $exports | sed -E 's/ /, /g') } from '\2';\n\`\`\`/" - fi - - # Remove `installation`, `cli`, and `c` sections: - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./deno -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Create package.json file for deno branch: - jq --indent 2 '{"name": .name, "version": .version, "description": .description, "license": .license, "type": "module", "main": "./mod.js", "homepage": .homepage, "repository": .repository, "bugs": .bugs, "keywords": .keywords, "funding": .funding}' package.json > ./deno/package.json - - # Delete everything in current directory aside from deno folder: - - name: 'Delete everything in current directory aside from deno folder' - run: | - find . -type 'f' | grep -v -e "deno" -e ".git/" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e "deno" -e ".git" | xargs -r rm -rf - - # Move deno directory to root: - - name: 'Move deno directory to root' - run: | - mv ./deno/* . - rmdir ./deno - - # Commit changes: - - name: 'Commit changes' - run: | - git add -A - git commit -m "Auto-generated commit" - - # Push changes to `deno` branch: - - name: 'Push changes to `deno` branch' - run: | - SLUG=${{ github.repository }} - echo "Pushing changes to $SLUG..." - git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" deno - - # Send status to Slack channel if job fails: - - name: 'Send status to Slack channel in case of failure' - # Pin action to full length commit SHA - uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2 - with: - status: ${{ job.status }} - channel: '#npm-ci' - if: failure() - - # Define job to create a UMD bundle... - umd: - - # Define display name: - name: 'Create UMD bundle' - - # Define the type of virtual host machine on which to run the job: - runs-on: ubuntu-latest - - # Indicate that this job depends on the test job finishing: - needs: test - - # Define the sequence of job steps... - steps: - # Checkout the repository: - - name: 'Checkout repository' - # Pin action to full length commit SHA - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - - # Configure Git: - - name: 'Configure Git' - run: | - git config --local user.email "noreply@stdlib.io" - git config --local user.name "stdlib-bot" - - # Check if remote `umd` branch exists: - - name: 'Check if remote `umd` branch exists' - id: umd-branch-exists - continue-on-error: true - run: | - git fetch --all - git ls-remote --exit-code --heads origin umd - if [ $? -eq 0 ]; then - echo "remote-exists=true" >> $GITHUB_OUTPUT - else - echo "remote-exists=false" >> $GITHUB_OUTPUT - fi - - # If `umd` exists, delete everything in branch and merge `production` into it - - name: 'If `umd` exists, delete everything in branch and merge `production` into it' - if: steps.umd-branch-exists.outputs.remote-exists - run: | - git checkout -b umd origin/umd - - find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm - find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf - - git add -A - git commit -m "Remove files" --allow-empty - - git config merge.theirs.name 'simulate `-s theirs`' - git config merge.theirs.driver 'cat %B > %A' - GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories - - # Copy files from `production` branch if necessary: - git checkout origin/production -- . - if [ -n "$(git status --porcelain)" ]; then - git add -A - git commit -m "Auto-generated commit" - fi - - # If `umd` does not exist, create `umd` branch: - - name: 'If `umd` does not exist, create `umd` branch' - if: ${{ steps.umd-branch-exists.outputs.remote-exists == false }} - run: | - git checkout production - git checkout -b umd - - # Copy files to umd directory: - - name: 'Copy files to umd directory' - run: | - mkdir -p umd - cp README.md LICENSE CONTRIBUTORS NOTICE ./umd - - # Install Node.js - - name: 'Install Node.js' - # Pin action to full length commit SHA - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 - with: - node-version: 20 - timeout-minutes: 5 - - # Install dependencies: - - name: 'Install production and development dependencies' - id: install - run: | - npm install || npm install || npm install - timeout-minutes: 15 - - # Extract alias: - - name: 'Extract alias' - id: extract-alias - run: | - alias=$(grep -E 'require\(' README.md | head -n 1 | sed -E 's/^var ([a-zA-Z0-9_]+) = .+/\1/') - echo "alias=${alias}" >> $GITHUB_OUTPUT - - # Create Universal Module Definition (UMD) Node.js bundle: - - name: 'Create Universal Module Definition (UMD) Node.js bundle' - id: umd-bundle-node - uses: stdlib-js/bundle-action@main - with: - target: 'umd-node' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Create Universal Module Definition (UMD) browser bundle: - - name: 'Create Universal Module Definition (UMD) browser bundle' - id: umd-bundle-browser - uses: stdlib-js/bundle-action@main - with: - target: 'umd-browser' - alias: ${{ steps.extract-alias.outputs.alias }} - - # Rewrite file contents: - - name: 'Rewrite file contents' - run: | - - # Replace links to other packages with links to the umd branch: - find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/"; - - # Remove `installation`, `cli`, and `c` sections: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
[^<]+<\/section>//g;" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.cli \-\->//g" - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+<\!\-\- \/.c \-\->//g" - - # Rewrite first `require()` to show consumption of the UMD bundle in Observable and via a `script` tag: - find ./umd -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`javascript\n(var|let|const)\s+([a-zA-Z0-9_]+)\s+=\s*require\( '\@stdlib\/([^']+)' \);\n\`\`\`/To use in Observable,\n\n\`\`\`javascript\n\2 = require\( 'https:\/\/cdn.jsdelivr.net\/gh\/stdlib-js\/\3\@umd\/browser.js' \)\n\`\`\`\n\nTo vendor stdlib functionality and avoid installing dependency trees for Node.js, you can use the UMD server build:\n\n\`\`\`javascript\nvar \2 = require\( 'path\/to\/vendor\/umd\/\3\/index.js' \)\n\`\`\`\n\nTo include the bundle in a webpage,\n\n\`\`\`html\n + + ```
@@ -252,7 +249,7 @@ out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); ## Notice -This package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. +This package is part of [stdlib][stdlib], a standard library with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more. For more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib]. @@ -317,7 +314,7 @@ Copyright © 2016-2025. The Stdlib [Authors][stdlib-authors]. -[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten +[@stdlib/array/base/flatten]: https://github.com/stdlib-js/array-base-flatten/tree/esm diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9702d4c..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security - -> Policy for reporting security vulnerabilities. - -See the security policy [in the main project repository](https://github.com/stdlib-js/stdlib/security). diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 0afc4e2..0000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,419 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isArray = require( '@stdlib/assert-is-array' ); -var isFloat64Array = require( '@stdlib/assert-is-float64array' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var filled = require( '@stdlib/array-base-filled' ); -var Float64Array = require( '@stdlib/array-float64' ); -var pkg = require( './../package.json' ).name; -var flattenBy = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Scales an input value. -* -* @private -* @param {number} v - input value -* @returns {number} output value -* -* @example -* var v = scale( 2.0 ); -* // returns 4.0 -*/ -function scale( v ) { - return v * 2.0; -} - - -// MAIN // - -bench( pkg+':ndims=2,size=100,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=2,size=100,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 10, 10 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=2,size=100,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 100 ); - x = filled( zeroTo( 10 ), 10 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 10, 10 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=3,size=125,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 5, 5, 5 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=3,size=125,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 125 ); - x = filled( filled( zeroTo( 5 ), 5 ), 5 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 5, 5, 5 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=4,size=144,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 4, 3, 4, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=4,size=144,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 144 ); - x = filled( filled( filled( zeroTo( 3 ), 4 ), 3 ), 4 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 4, 3, 4, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,lexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], false, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':ndims=5,size=108,colexicographic', function benchmark( b ) { - var x; - var i; - var v; - - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy( x, [ 2, 2, 3, 3, 3 ], true, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an array' ); - } - } - b.toc(); - if ( !isArray( v ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,lexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], false, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+':assign:ndims=5,size=108,colexicographic', function benchmark( b ) { - var out; - var x; - var i; - var v; - - out = new Float64Array( 108 ); - x = filled( filled( filled( filled( zeroTo( 3 ), 3 ), 3 ), 2 ), 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = flattenBy.assign( x, [ 2, 2, 3, 3, 3 ], true, out, 1, 0, scale ); - if ( typeof v !== 'object' ) { - b.fail( 'should return a Float64Array' ); - } - } - b.toc(); - if ( !isFloat64Array( v ) ) { - b.fail( 'should return a Float64Array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/branches.md b/branches.md deleted file mode 100644 index 5f6b97f..0000000 --- a/branches.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# Branches - -This repository has the following branches: - -- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place. -- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network). -- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]). -- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]). -- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]). - -The following diagram illustrates the relationships among the above branches: - -```mermaid -graph TD; -A[stdlib]-->|generate standalone package|B; -B[main] -->|productionize| C[production]; -C -->|bundle| D[esm]; -C -->|bundle| E[deno]; -C -->|bundle| F[umd]; - -%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by" -%% click B href "https://github.com/stdlib-js/array-base-flatten-by/tree/main" -%% click C href "https://github.com/stdlib-js/array-base-flatten-by/tree/production" -%% click D href "https://github.com/stdlib-js/array-base-flatten-by/tree/esm" -%% click E href "https://github.com/stdlib-js/array-base-flatten-by/tree/deno" -%% click F href "https://github.com/stdlib-js/array-base-flatten-by/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/flatten-by -[production-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/production -[deno-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/deno -[deno-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/umd -[umd-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/array-base-flatten-by/tree/esm -[esm-readme]: https://github.com/stdlib-js/array-base-flatten-by/blob/esm/README.md \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 79edcf9..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import flattenBy from '../docs/types/index'; -export = flattenBy; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index eba1a7b..0000000 --- a/dist/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var p=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var m=p(function(T,z){ -var x=require('@stdlib/ndarray-base-shape2strides/dist'),C=require('@stdlib/ndarray-base-vind2bind/dist'),D=require('@stdlib/ndarray-base-numel/dist'),w=require('@stdlib/blas-ext-base-grev/dist'),E=require('@stdlib/array-base-zeros/dist'),F=require('@stdlib/array-base-copy-indexed/dist'),G="throw";function M(e,r,n,a,u,c,l){var i;for(i=0;i[ 2, 4, 6, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nvar numel = require( '@stdlib/ndarray-base-numel' );\nvar zeros = require( '@stdlib/array-base-zeros' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = flattenBy;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var flattenBy = require( '@stdlib/array-base-flatten-by' );\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nvar setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );\nvar main = require( './main.js' );\nvar assign = require( './assign.js' );\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "uGAAA,IAAAA,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAwBA,IAAIC,EAAgB,QAAS,oCAAqC,EAC9DC,EAAY,QAAS,gCAAiC,EACtDC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAO,QAAS,4BAA6B,EAC7CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAO,QAAS,iCAAkC,EAKlDC,EAAO,QA8BX,SAASC,EAAQC,EAAGC,EAAGC,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CAC3D,IAAI,EACJ,IAAM,EAAI,EAAG,EAAIL,EAAG,IACnBC,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAG,CAAE,EAAG,CAAE,CAAE,EAAGA,CAAE,EACrDI,GAAUD,CAEZ,CAmBA,SAASI,EAAsBC,EAAMR,EAAGS,EAAOC,EAAOC,EAAKC,EAASV,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACxG,IAAIO,EACAC,EACAC,EACAC,EACAC,EAOJ,IAJAD,EAAIL,EAAM,EACVE,EAAQG,IAAMP,EAEdM,EAAIL,EAAOC,CAAI,EACTM,EAAI,EAAGA,EAAIF,EAAGE,IACnBH,EAAMF,EAAQ,MAAM,EACpBE,EAAI,KAAMG,CAAE,EACPJ,GACJX,EAAKE,CAAO,EAAIC,EAAK,KAAMC,EAASN,EAAGiB,CAAE,EAAGH,EAAKN,CAAK,EACtDJ,GAAUD,GAEVC,EAASG,EAAsBC,EAAMR,EAAGiB,CAAE,EAAGR,EAAOC,EAAOM,EAAGF,EAAKZ,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAGxG,OAAOF,CACR,CAeA,SAASc,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACtF,IAAIa,EACAC,EACAC,EACAC,EACAC,EACAC,EACAP,EAuBJ,IAlBAE,EAAMzB,EAAOgB,CAAM,EAGnBU,EAAMxB,EAAOuB,CAAI,EACjBZ,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGU,EAAK,EAAG,EAAGf,EAAMC,CAAQ,EAG1Ee,EAAM,YAGNE,EAAK/B,EAAekB,EAAOW,CAAI,EAG/BC,EAAKzB,EAAMa,CAAM,EACjBf,EAAMc,EAAOa,EAAI,CAAE,EACnB3B,EAAMc,EAAOc,EAAI,CAAE,EAGbN,EAAI,EAAGA,EAAIE,EAAKF,IACrBO,EAAI/B,EAAW6B,EAAIC,EAAI,EAAGF,EAAKJ,EAAGnB,CAAK,EACvCI,EAAKE,CAAO,EAAIgB,EAAKI,CAAE,EACvBpB,GAAUD,CAEZ,CA8CA,SAASsB,EAAWzB,EAAGU,EAAOgB,EAAiBxB,EAAKC,EAAQC,EAAQC,EAAMC,EAAU,CACnF,IAAIG,EAAQC,EAAM,OAClB,OAAKD,IAAU,EACPP,EAEHO,IAAU,GAEdV,EAAQC,EAAGU,EAAO,CAAE,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACnDJ,GAEHwB,GACJR,EAAwBlB,EAAGS,EAAOC,EAAOR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EACrEJ,IAERK,EAAsBP,EAAGA,EAAGS,EAAOC,EAAO,EAAG,CAAC,EAAGR,EAAKC,EAAQC,EAAQC,EAAMC,CAAQ,EAC7EJ,EACR,CAKAX,EAAO,QAAUkC,ICrOjB,IAAAE,EAAAC,EAAA,SAAAC,EAAAC,EAAA,cAsBA,IAAIC,EAAQ,QAAS,4BAA6B,EAC9CC,EAAQ,QAAS,0BAA2B,EAC5CC,EAAS,IAuCb,SAASC,EAAWC,EAAGC,EAAOC,EAAiBC,EAAMC,EAAU,CAC9D,IAAIC,EAAMR,EAAOD,EAAOK,CAAM,CAAE,EAChC,OAAOH,EAAQE,EAAGC,EAAOC,EAAiBG,EAAK,EAAG,EAAGF,EAAMC,CAAQ,CACpE,CAKAT,EAAO,QAAUI,ICFjB,IAAIO,EAAc,QAAS,uDAAwD,EAC/EC,EAAO,IACPC,EAAS,IAKbF,EAAaC,EAAM,SAAUC,CAAO,EAKpC,OAAO,QAAUD", - "names": ["require_assign", "__commonJSMin", "exports", "module", "shape2strides", "vind2bind", "numel", "grev", "zeros", "copy", "MODE", "copyBy", "x", "N", "out", "stride", "offset", "clbk", "thisArg", "recurseLexicographic", "orig", "ndims", "shape", "dim", "indices", "FLG", "idx", "S", "d", "i", "flattenColexicographic", "len", "tmp", "ord", "sh", "sx", "j", "flattenBy", "colexicographic", "require_main", "__commonJSMin", "exports", "module", "numel", "zeros", "assign", "flattenBy", "x", "shape", "colexicographic", "clbk", "thisArg", "out", "setReadOnly", "main", "assign"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index dc9b678..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,106 +0,0 @@ - -{{alias}}( x, shape, colex, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Flattened array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = {{alias}}( x, [ 2, 2 ], false, fcn ) - [ 2, 4, 6, 8 ] - > out = {{alias}}( x, [ 2, 2 ], true, fcn ) - [ 2, 6, 4, 8 ] - - -{{alias}}.assign( x, shape, colex, out, stride, offset, clbk[, thisArg] ) - Flattens an n-dimensional nested array according to a callback function and - assigns elements to a provided output array. - - The function assumes that all nested arrays have the same length (i.e., the - input array is *not* a ragged array). - - The callback function is provided the following arguments: - - - value: nested array element. - - indices: element indices (in lexicographic order). - - arr: the input array. - - Parameters - ---------- - x: Array - Input array. - - shape: Array - Array shape. - - colex: boolean - Specifies whether to flatten array values in colexicographic order. - - out: Collection - Output array. - - stride: integer - Output array stride. - - offset: integer - Output array index offset. - - clbk: Function - Callback function. - - thisArg: any (optional) - Callback execution context. - - Returns - ------- - out: Array - Output array. - - Examples - -------- - > function fcn( v ) { return v * 2; }; - > var x = [ [ 1, 2 ], [ 3, 4 ] ]; - > var out = [ 0, 0, 0, 0 ]; - > var v = {{alias}}.assign( x, [ 2, 2 ], false, out, 1, 0, fcn ) - [ 2, 4, 6, 8 ] - > var bool = ( v === out ) - true - > out = [ 0, 0, 0, 0 ]; - > {{alias}}.assign( x, [ 2, 2 ], true, out, 1, 0, fcn ); - > out - [ 2, 6, 4, 8 ] - - See Also - -------- - diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index fe3bccd..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* -* @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. -*/ - -import flattenBy = require( './index' ); - -/** -* Identity function. -* -* @param value - input value -* @returns input value -*/ -function identity( value: T ): T { - return value; -} - - -// TESTS // - -// The function returns an array... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, identity ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity ); // $ExpectType number[] - - flattenBy( x, [ 2, 2 ], false, identity, {} ); // $ExpectType number[] - flattenBy( x, [ 2, 2 ], true, identity, {} ); // $ExpectType number[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity ); // $ExpectType string[] - - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, identity, {} ); // $ExpectType string[] - flattenBy( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, identity, {} ); // $ExpectType string[] -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object... -{ - flattenBy( 1, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity ); // $ExpectError - - flattenBy( 1, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( true, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( false, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( null, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( void 0, [ 2, 2 ], false, identity, {} ); // $ExpectError - flattenBy( {}, [ 2, 2 ], false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, '', false, identity ); // $ExpectError - flattenBy( x, 1, false, identity ); // $ExpectError - flattenBy( x, true, false, identity ); // $ExpectError - flattenBy( x, false, false, identity ); // $ExpectError - flattenBy( x, null, false, identity ); // $ExpectError - flattenBy( x, void 0, false, identity ); // $ExpectError - flattenBy( x, {}, false, identity ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity ); // $ExpectError - - flattenBy( x, '', false, identity, {} ); // $ExpectError - flattenBy( x, 1, false, identity, {} ); // $ExpectError - flattenBy( x, true, false, identity, {} ); // $ExpectError - flattenBy( x, false, false, identity, {} ); // $ExpectError - flattenBy( x, null, false, identity, {} ); // $ExpectError - flattenBy( x, void 0, false, identity, {} ); // $ExpectError - flattenBy( x, {}, false, identity, {} ); // $ExpectError - flattenBy( x, [ 1, '2', 3 ], false, identity, {} ); // $ExpectError - flattenBy( x, ( x: number ): number => x, false, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], '', identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity ); // $ExpectError - - flattenBy( x, [ 2, 2 ], '', identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], 1, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], null, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], void 0, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], {}, identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], [], identity, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy( x, [ 2, 2 ], false, '' ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0 ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [] ); // $ExpectError - - flattenBy( x, [ 2, 2 ], false, '', {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, 1, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, true, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, false, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, null, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, void 0, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, {}, {} ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, [], {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy(); // $ExpectError - flattenBy( x ); // $ExpectError - flattenBy( x, [ 2, 2 ] ); // $ExpectError - flattenBy( x, [ 2, 2 ], false ); // $ExpectError - flattenBy( x, [ 2, 2 ], false, identity, {}, {} ); // $ExpectError -} - -// Attached to the main export is an `assign` method which returns a collection... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - const out1 = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( x, [ 2, 2 ], false, out1, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( x, [ 2, 2 ], true, out1, 1, 0, identity, {} ); // $ExpectType Collection - - const out2 = [ '', '', '', '' ]; - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity ); // $ExpectType Collection - - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], false, out2, 1, 0, identity, {} ); // $ExpectType Collection - flattenBy.assign( [ [ '1', '2' ], [ '3', '4' ] ], [ 2, 2 ], true, out2, 1, 0, identity, {} ); // $ExpectType Collection -} - -// The compiler throws an error if the `assign` method is provided a first argument which is not an array-like object... -{ - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( 1, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( true, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( false, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( null, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( void 0, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( {}, [ 2, 2 ], false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object containing numbers... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, '', false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, '', false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, 1, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, true, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, false, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, null, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, void 0, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, {}, false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 1, '2', 3 ], false, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, ( x: number ): number => x, false, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a third argument which is not a boolean... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], '', out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], 1, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], null, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], void 0, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], {}, out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], [], out, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], ( x: number ): number => x, out, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fourth argument which is not an array-like object... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, 1, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, true, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, false, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, null, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, void 0, 1, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, {}, 1, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a fifth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, '1', 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, true, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, false, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, null, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, void 0, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, {}, 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, [], 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, ( x: number ): number => x, 0, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a sixth argument which is not a number... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, '1', identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, true, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, false, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, null, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, void 0, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, {}, identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, [], identity, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided a seventh argument which is not a function... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1' ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [] ); // $ExpectError - - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, '1', {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, 1, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, true, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, false, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, null, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, void 0, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, {}, {} ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, [], {} ); // $ExpectError -} - -// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... -{ - const x = [ [ 1, 2 ], [ 3, 4 ] ]; - const out = [ 0, 0, 0, 0 ]; - - flattenBy.assign(); // $ExpectError - flattenBy.assign( x ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ] ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0 ); // $ExpectError - flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 10d5172..0000000 --- a/examples/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib' ); - -var fcn = naryFunction( abs, 1 ); - -// Define a 2x2x1x2x2 array: -var x = [ - [ - [ - [ - [ -1, -2 ], [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], [ -15, -16 ] - ] - ] - ] -]; - -var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn ); -console.log( out ); -// => [] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn ); -console.log( out ); -// => [ 1 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8 ] - -out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 5, 3, 7, 2, 6, 4, 8 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn ); -console.log( out ); -// => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] - -out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn ); -console.log( out ); -// => [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 99% rename from docs/types/index.d.ts rename to index.d.ts index 0df3412..d6e29ef 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -20,7 +20,7 @@ // TypeScript Version: 4.1 -/// +/// import { Collection, Array1D, Array2D, Array3D, Array4D, Array5D, Array6D, Array7D, Array8D, Array9D, Array10D } from '@stdlib/types/array'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..c089b89 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +// Copyright (c) 2025 The Stdlib Authors. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0 +/// +import s from"https://cdn.jsdelivr.net/gh/stdlib-js/utils-define-nonenumerable-read-only-property@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import r from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zeros@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-shape2strides@v0.2.2-esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/blas-ext-base-grev@v0.2.1-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-copy-indexed@v0.2.2-esm/index.mjs";var a="throw";function m(s,e,r,t,n,i,d,a,o,l,j){var v,p,h,f,b;for(v=(f=n+1)===r,h=t[n],b=0;b[ 2, 4, 6, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) {\n\tvar ndims = shape.length;\n\tif ( ndims === 0 ) { // 0-dimensional array\n\t\treturn out;\n\t}\n\tif ( ndims === 1 ) { // 1-dimensional array\n\t\t// For 1-dimensional arrays, we can perform simple iteration:\n\t\tcopyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\tif ( colexicographic ) {\n\t\tflattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg );\n\t\treturn out;\n\t}\n\trecurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport numel from '@stdlib/ndarray-base-numel';\nimport zeros from '@stdlib/array-base-zeros';\nimport assign from './assign.js';\n\n\n// MAIN //\n\n/**\n* Flattens an n-dimensional nested array according to a callback function.\n*\n* ## Notes\n*\n* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).\n*\n* @param {Array} x - input nested array\n* @param {NonNegativeIntegerArray} shape - array shape\n* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order\n* @param {Function} clbk - callback function\n* @param {*} [thisArg] - callback execution context\n* @returns {Array} flattened array\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*/\nfunction flattenBy( x, shape, colexicographic, clbk, thisArg ) {\n\tvar out = zeros( numel( shape ) );\n\treturn assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default flattenBy;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Flatten an n-dimensional nested array according to a callback function.\n*\n* @module @stdlib/array-base-flatten-by\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], false, scale );\n* // returns [ 2, 4, 6, 8 ]\n*\n* @example\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = flattenBy( x, [ 2, 2 ], true, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n* import flattenBy from '@stdlib/array-base-flatten-by';\n*\n* function scale( v ) {\n* return v * 2;\n* }\n*\n* var x = [ [ 1, 2 ], [ 3, 4 ] ];\n*\n* var out = new Float64Array( 4 );\n* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );\n* // returns [ 2, 6, 4, 8 ]\n*\n* var bool = ( y === out );\n* // returns true\n*/\n\n// MODULES //\n\nimport setReadOnly from '@stdlib/utils-define-nonenumerable-read-only-property';\nimport main from './main.js';\nimport assign from './assign.js';\n\n\n// MAIN //\n\nsetReadOnly( main, 'assign', assign );\n\n\n// EXPORTS //\n\nexport default main;\n"],"names":["MODE","recurseLexicographic","orig","x","ndims","shape","dim","indices","out","stride","offset","clbk","thisArg","FLG","idx","S","d","i","slice","push","call","flattenBy","colexicographic","length","N","copyBy","len","tmp","ord","sh","sx","j","numel","zeros","shape2strides","copy","grev","vind2bind","flattenColexicographic","assign","setReadOnly","main"],"mappings":";;qrBAkCA,IAAIA,EAAO,QAuDX,SAASC,EAAsBC,EAAMC,EAAGC,EAAOC,EAAOC,EAAKC,EAASC,EAAKC,EAAQC,EAAQC,EAAMC,GAC9F,IAAIC,EACAC,EACAC,EACAC,EACAC,EAOJ,IAHAJ,GADAG,EAAIV,EAAM,KACIF,EAEdW,EAAIV,EAAOC,GACLW,EAAI,EAAGA,EAAIF,EAAGE,KACnBH,EAAMP,EAAQW,SACVC,KAAMF,GACLJ,GACJL,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAKH,EAAKZ,GACjDQ,GAAUD,GAEVC,EAAST,EAAsBC,EAAMC,EAAGc,GAAKb,EAAOC,EAAOW,EAAGF,EAAKN,EAAKC,EAAQC,EAAQC,EAAMC,GAGhG,OAAOF,CACR,CAgGA,SAASW,EAAWlB,EAAGE,EAAOiB,EAAiBd,EAAKC,EAAQC,EAAQC,EAAMC,GACzE,IAAIR,EAAQC,EAAMkB,OAClB,OAAe,IAAVnB,EACGI,EAEO,IAAVJ,GArJN,SAAiBD,EAAGqB,EAAGhB,EAAKC,EAAQC,EAAQC,EAAMC,GACjD,IAAIK,EACJ,IAAMA,EAAI,EAAGA,EAAIO,EAAGP,IACnBT,EAAKE,GAAWC,EAAKS,KAAMR,EAAST,EAAGc,GAAK,CAAEA,GAAKd,GACnDO,GAAUD,CAEZ,CAiJEgB,CAAQtB,EAAGE,EAAO,GAAKG,EAAKC,EAAQC,EAAQC,EAAMC,GAC3CJ,GAEHc,GA3FN,SAAiCnB,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC5E,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAd,EAuBJ,IAlBAS,EAAMM,EAAO3B,GAIbJ,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAD7CsB,EAAMM,EAAOP,GACyC,EAAG,EAAGf,EAAMC,GAMlEkB,EAAKI,EAAe7B,EAHpBuB,EAAM,aAMNC,EAAKM,EAAM9B,GACX+B,EAAMhC,EAAOyB,EAAI,GACjBO,EAAMhC,EAAO0B,EAAI,GAGXb,EAAI,EAAGA,EAAIS,EAAKT,IACrBc,EAAIM,EAAWR,EAAIC,EAAI,EAAGF,EAAKX,EAAGjB,GAClCQ,EAAKE,GAAWiB,EAAKI,GACrBrB,GAAUD,CAEZ,CAyDE6B,CAAwBnC,EAAGC,EAAOC,EAAOG,EAAKC,EAAQC,EAAQC,EAAMC,GAC7DJ,IAERP,EAAsBE,EAAGA,EAAGC,EAAOC,EAAO,EAAG,GAAIG,EAAKC,EAAQC,EAAQC,EAAMC,GACrEJ,EACR,CCjKA,SAASa,EAAWlB,EAAGE,EAAOiB,EAAiBX,EAAMC,GAEpD,OAAO2B,EAAQpC,EAAGE,EAAOiB,EADfW,EAAOD,EAAO3B,IACuB,EAAG,EAAGM,EAAMC,EAC5D,CCUA4B,EAAAC,EAAA,SAAAF"} \ No newline at end of file diff --git a/lib/assign.js b/lib/assign.js deleted file mode 100644 index dc44b93..0000000 --- a/lib/assign.js +++ /dev/null @@ -1,230 +0,0 @@ -/** -* @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. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var grev = require( '@stdlib/blas-ext-base-grev' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var copy = require( '@stdlib/array-base-copy-indexed' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// FUNCTIONS // - -/** -* Copies a specified number of array elements to a provided array according to a callback function. -* -* @private -* @param {Array} x - input array -* @param {NonNegativeInteger} N - number of elements to copy -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ 1, 2, 3, 4 ]; -* -* var out = [ 0, 0, 0 ]; -* copyBy( x, 3, out, 1, 0, scale ); -* -* var o = out; -* // returns [ 2, 4, 6 ] -*/ -function copyBy( x, N, out, stride, offset, clbk, thisArg ) { - var i; - for ( i = 0; i < N; i++ ) { - out[ offset ] = clbk.call( thisArg, x[ i ], [ i ], x ); - offset += stride; - } -} - -/** -* Recursively flattens an array in lexicographic order. -* -* @private -* @param {Array} orig - original input array -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {NonNegativeInteger} dim - dimension index -* @param {NonNegativeIntegerArray} indices - outer array element indices -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {NonNegativeInteger} offset for next output array element -*/ -function recurseLexicographic( orig, x, ndims, shape, dim, indices, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-params - var FLG; - var idx; - var S; - var d; - var i; - - // Check whether we've reached the last dimension: - d = dim + 1; - FLG = ( d === ndims ); - - S = shape[ dim ]; - for ( i = 0; i < S; i++ ) { - idx = indices.slice(); // we explicitly copy in order to avoid potential mutation when calling `clbk` - idx.push( i ); - if ( FLG ) { - out[ offset ] = clbk.call( thisArg, x[ i ], idx, orig ); - offset += stride; - } else { - offset = recurseLexicographic( orig, x[ i ], ndims, shape, d, idx, out, stride, offset, clbk, thisArg ); - } - } - return offset; -} - -/** -* Flattens an array in colexicographic order. -* -* @private -* @param {Array} x - array to flatten -* @param {NonNegativeInteger} ndims - number of dimensions in the input array -* @param {NonNegativeIntegerArray} shape - shape of the input array -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -*/ -function flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ) { - var len; - var tmp; - var ord; - var sh; - var sx; - var j; - var i; - - // Note that, in contrast to lexicographic iteration, we cannot readily define a straightforward recursive definition for colexicographic iteration. Accordingly, we have to perform a workaround in which we first flatten in lexicographic order and then perform an out-of-place transposition to return an array in colexicographic order. - - // Determine how many elements will be in the output array: - len = numel( shape ); - - // For input arrays having an arbitrary number of dimensions, first flatten in lexicographic order: - tmp = zeros( len ); - recurseLexicographic( x, x, ndims, shape, 0, [], tmp, 1, 0, clbk, thisArg ); - - // Define the memory layout: - ord = 'row-major'; - - // Generate a stride array for lexicographic order: - sx = shape2strides( shape, ord ); - - // Reverse the dimensions and strides (i.e., define the shape and strides of the transpose): - sh = copy( shape ); - grev( ndims, sh, 1 ); - grev( ndims, sx, 1 ); - - // Iterate over each element based on the linear **view** index (note: this has negative performance implications due to lack of data locality)... - for ( i = 0; i < len; i++ ) { - j = vind2bind( sh, sx, 0, ord, i, MODE ); - out[ offset ] = tmp[ j ]; - offset += stride; - } -} - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function and assigns elements to a provided output array. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Collection} out - output array -* @param {integer} stride - output array stride -* @param {NonNegativeInteger} offset - output array index offset -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Collection} output array -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { - var ndims = shape.length; - if ( ndims === 0 ) { // 0-dimensional array - return out; - } - if ( ndims === 1 ) { // 1-dimensional array - // For 1-dimensional arrays, we can perform simple iteration: - copyBy( x, shape[ 0 ], out, stride, offset, clbk, thisArg ); - return out; - } - if ( colexicographic ) { - flattenColexicographic( x, ndims, shape, out, stride, offset, clbk, thisArg ); - return out; - } - recurseLexicographic( x, x, ndims, shape, 0, [], out, stride, offset, clbk, thisArg ); - return out; -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 856b1c5..0000000 --- a/lib/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -/** -* Flatten an n-dimensional nested array according to a callback function. -* -* @module @stdlib/array-base-flatten-by -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var flattenBy = require( '@stdlib/array-base-flatten-by' ); -* -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = new Float64Array( 4 ); -* var y = flattenBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale ); -* // returns [ 2, 6, 4, 8 ] -* -* var bool = ( y === out ); -* // returns true -*/ - -// MODULES // - -var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' ); -var main = require( './main.js' ); -var assign = require( './assign.js' ); - - -// MAIN // - -setReadOnly( main, 'assign', assign ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 59e6242..0000000 --- a/lib/main.js +++ /dev/null @@ -1,72 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var zeros = require( '@stdlib/array-base-zeros' ); -var assign = require( './assign.js' ); - - -// MAIN // - -/** -* Flattens an n-dimensional nested array according to a callback function. -* -* ## Notes -* -* - The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array). -* -* @param {Array} x - input nested array -* @param {NonNegativeIntegerArray} shape - array shape -* @param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order -* @param {Function} clbk - callback function -* @param {*} [thisArg] - callback execution context -* @returns {Array} flattened array -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], false, scale ); -* // returns [ 2, 4, 6, 8 ] -* -* @example -* function scale( v ) { -* return v * 2; -* } -* -* var x = [ [ 1, 2 ], [ 3, 4 ] ]; -* -* var out = flattenBy( x, [ 2, 2 ], true, scale ); -* // returns [ 2, 6, 4, 8 ] -*/ -function flattenBy( x, shape, colexicographic, clbk, thisArg ) { - var out = zeros( numel( shape ) ); - return assign( x, shape, colexicographic, out, 1, 0, clbk, thisArg ); -} - - -// EXPORTS // - -module.exports = flattenBy; diff --git a/package.json b/package.json index 822562a..857ce46 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.2.1", "description": "Flatten an n-dimensional nested array according to a callback function.", "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", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": { - "test": "make test", - "test-cov": "make test-cov", - "examples": "make examples", - "benchmark": "make benchmark" - }, + "type": "module", + "main": "./index.mjs", "homepage": "https://stdlib.io", "repository": { "type": "git", @@ -36,46 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-copy-indexed": "^0.2.2", - "@stdlib/array-base-zeros": "^0.2.2", - "@stdlib/blas-ext-base-grev": "^0.2.1", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-base-filled": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/assert-has-own-property": "^0.2.2", - "@stdlib/assert-is-array": "^0.2.2", - "@stdlib/assert-is-float64array": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/utils-nary-function": "^0.2.2", - "tape": "git+https://github.com/kgryte/tape.git#fix/globby", - "istanbul": "^0.4.1", - "tap-min": "git+https://github.com/Planeshifter/tap-min.git", - "@stdlib/bench-harness": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], "keywords": [ "stdlib", "utilities", @@ -99,4 +36,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} \ No newline at end of file +} diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..27c754b --- /dev/null +++ b/stats.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/test/dist/test.js b/test/dist/test.js deleted file mode 100644 index a8a9c60..0000000 --- a/test/dist/test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var main = require( './../../dist' ); - - -// TESTS // - -tape( 'main export is defined', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( main !== void 0, true, 'main export is defined' ); - t.end(); -}); diff --git a/test/test.assign.js b/test/test.assign.js deleted file mode 100644 index ff6dd6f..0000000 --- a/test/test.assign.js +++ /dev/null @@ -1,1103 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var Float64Array = require( '@stdlib/array-float64' ); -var flattenBy = require( './../lib/assign.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], false, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6, 3, 7 ] ); - out = new Float64Array( 6 ); - actual = flattenBy( x, [ 2, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ] ); - out = new Float64Array( 9 ); - actual = flattenBy( x, [ 3, 3 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 2 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 4 ], true, out, 1, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ] ); - out = new Float64Array( 12 ); - actual = flattenBy( x, [ 3, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 4, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 2, 6, 10, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 4, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 9, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 5, 6, 9, 10, 13, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [] ); - out = new Float64Array( 0 ); - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1 ] ); - out = new Float64Array( 1 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 2 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9 ] ); - out = new Float64Array( 2 ); - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 2, 6 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 5, 3, 7, 2, 6, 4, 8 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13 ] ); - out = new Float64Array( 4 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 2, 10, 6, 14 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = new Float64Array( [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ] ); // eslint-disable-line max-len - out = new Float64Array( 16 ); - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, out, 1, 0, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 2, 0, 3, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing a stride (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 1, 0, 3, 0, 2, 0, 4, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 2, 0, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; 1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 4 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (lexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 2, 3, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports providing an offset (colexicographic; >1d)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 0, 1, 3, 2, 4, 0, 0 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, 1, 2, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (lexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 3, 0, 2, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], false, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports complex access patterns (colexicographic)', function test( t ) { - var expected; - var actual; - var out; - var x; - - x = [ - [ -1, -2 ], - [ -3, -4 ] - ]; - - expected = new Float64Array( [ 0, 4, 0, 2, 0, 3, 0, 1 ] ); - out = new Float64Array( 8 ); - actual = flattenBy( x, [ 2, 2 ], true, out, -2, 7, clbk ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 4 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], false, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var out; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - out = new Float64Array( 4 ); - flattenBy( x, [ 2, 2 ], true, out, 1, 0, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f2bee9c..0000000 --- a/test/test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var hasOwnProp = require( '@stdlib/assert-has-own-property' ); -var flattenBy = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'attached to the main export is an `assign` method', function test( t ) { - t.strictEqual( hasOwnProp( flattenBy, 'assign' ), true, 'has property' ); - t.strictEqual( typeof flattenBy.assign, 'function', 'has method' ); - t.end(); -}); diff --git a/test/test.main.js b/test/test.main.js deleted file mode 100644 index 887d5c0..0000000 --- a/test/test.main.js +++ /dev/null @@ -1,774 +0,0 @@ -/** -* @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. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var flattenBy = require( './../lib/main.js' ); - - -// VARIABLES // - -var clbk = naryFunction( abs, 1 ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof flattenBy, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function flattens an array (0d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens an array (1d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ -1, -2, -3, -4 ]; - - expected = []; - actual = flattenBy( x, [ 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4 ]; - actual = flattenBy( x, [ 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7 ]; - actual = flattenBy( x, [ 2, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]; - actual = flattenBy( x, [ 3, 3 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 4 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 2d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ -1, -2, -3, -4 ], - [ -5, -6, -7, -8 ], - [ -9, -10, -11, -12 ], - [ -13, -14, -15, -16 ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6, 3, 7 ]; - actual = flattenBy( x, [ 2, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]; - actual = flattenBy( x, [ 3, 3 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 4 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 3d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ], - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5 ]; - actual = flattenBy( x, [ 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 3, 7, 11, 2, 6, 10, 4, 8, 12 ]; - actual = flattenBy( x, [ 3, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 4, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 2, 6, 10, 14 ]; - actual = flattenBy( x, [ 4, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13, 3, 7, 11, 15, 2, 6, 10, 14, 4, 8, 12, 16 ]; - actual = flattenBy( x, [ 4, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 4d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ], - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ], - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ], - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (lexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 9, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 5, 6, 9, 10, 13, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function flattens a nested array (colexicographic; 5d)', function test( t ) { - var expected; - var actual; - var x; - - x = [ - [ - [ - [ - [ -1, -2 ], - [ -3, -4 ] - ] - ], - [ - [ - [ -5, -6 ], - [ -7, -8 ] - ] - ] - ], - [ - [ - [ - [ -9, -10 ], - [ -11, -12 ] - ] - ], - [ - [ - [ -13, -14 ], - [ -15, -16 ] - ] - ] - ] - ]; - - expected = []; - actual = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 0, 0, 1, 0, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = []; - actual = flattenBy( x, [ 1, 0, 0, 1, 0 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 2 ]; - actual = flattenBy( x, [ 1, 1, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9 ]; - actual = flattenBy( x, [ 2, 1, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 2, 6 ]; - actual = flattenBy( x, [ 1, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 5, 3, 7, 2, 6, 4, 8 ]; - actual = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 1 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 2, 10, 6, 14 ]; - actual = flattenBy( x, [ 2, 2, 1, 1, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - expected = [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]; - actual = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, clbk ); - t.deepEqual( actual, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports setting the callback execution context (lexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; 1d)', function test( t ) { - var ctx; - var x; - - x = [ 1, 2, 3, 4 ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 4 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 1, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (lexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], false, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -}); - -tape( 'the function supports setting the callback execution context (colexicographic; >1d)', function test( t ) { - var ctx; - var x; - - x = [ - [ 1, 2 ], - [ 3, 4 ] - ]; - - ctx = { - 'count': 0 - }; - - flattenBy( x, [ 2, 2 ], true, fcn, ctx ); - t.strictEqual( ctx.count, 4, 'returns expected value' ); - - t.end(); - - function fcn( value, indices, arr ) { - this.count += 1; // eslint-disable-line no-invalid-this - t.strictEqual( indices.length, 2, 'returns expected value' ); - t.strictEqual( value, arr[ indices[0] ][ indices[1] ], 'returns expected value' ); - t.strictEqual( arr, x, 'returns expected value' ); - } -});